2011-03-04 68 views
2

我想将以下查询封装到返回查询结果(即成员)的方法中。LINQ:不支持将var作为方法参数传递

然后我想采取另一个查询,将查询返回的结果。


我知道我不能在要创建的方法中使用var作为参数类型或结果类型。我真的希望得到这种支持,让我的生活变得简单。

其他详细信息: MembersItemsControl.Items属性有一个私有成员'_ItemsSourceAsList',其类型为'Users',它是一个从ObservableCollection继承的类。


有什么建议吗?


查询代码如下:


var members = (from member in MembersItemsControl.Items 
       where 
       (
        // Match either male or female selection 
        (member as UserInformation).sex.Equals("Male") == 
         SeekingMale.IsChecked.Value && 
        (member as UserInformation).sex.Equals("Female") == 
         SeekingFemale.IsChecked.Value 
       ) 
       || 
       (
        // Provide both male and female if both options are selected 
        SeekingMale.IsChecked.Value == true && 
        SeekingFemale.IsChecked.Value == true 
       ) 
       select member); 
+0

我真的不明白。它是否试图将匿名类型作为参数/返回类型传递? – spender 2011-03-04 14:39:41

+0

MembersItemsControl.Items'的类型是什么? – 2011-03-04 14:39:42

回答

3

您可以随时通过LINQ集合作为IEnumerable<Member>

public IEnumarable<Member> Foo() 
{ 
    var members = (from member in MembersItemsControl.Items 
        where 
        (
         // Match either male or female selection 
         (member as UserInformation).sex.Equals("Male") == 
          SeekingMale.IsChecked.Value && 
         (member as UserInformation).sex.Equals("Female") == 
          SeekingFemale.IsChecked.Value 
        ) 
        || 
        (
         // Provide both male and female if both options are selected 
         SeekingMale.IsChecked.Value == true && 
         SeekingFemale.IsChecked.Value == true 
        ) 
        select member); 

    return members; 
} 

MemberMembersItemsControl.Items项目的类型。

+0

为了澄清,他的成员类型是IEnumerable,所以您可以将成员传递给IEnumerable类型的参数。 – DOK 2011-03-04 14:42:07

+0

返回一个IEnum ** e ** rable是相当无用的。您需要使用IEnumerable的通用实现(IEnumerable ),以便LINQ能够执行任何有用的操作。 – GenericTypeTea 2011-03-04 14:55:18

+0

我同意。纠正。 – rotman 2011-03-04 15:08:19

1

你的意思是你只是想让我能够去var members = GetQuery();

你可以只是把结果作为IEnumerable<Member>

private IEnumerable<Member> GetMemberQuery() 
{ 
    var members = (from member in MembersItemsControl.Items 
        where 
        (
         // Match either male or female selection 
         (member as UserInformation).sex.Equals("Male") == 
          SeekingMale.IsChecked.Value && 
         (member as UserInformation).sex.Equals("Female") == 
          SeekingFemale.IsChecked.Value 
        ) 
        || 
        (
         // Provide both male and female if both options are selected 
         SeekingMale.IsChecked.Value == true && 
         SeekingFemale.IsChecked.Value == true 
        ) 
        select member); 

    return members; 
} 

然后你就可以使用,无论是查询你喜欢:

var otherQuery = GetMemberQuery().Where(x=> x.Name == "Bob"); 
1

你必须明确地键入您的变量members - var is just a shortcut到允许隐式键入局部变量。如果您必须传递变量或将其返回到本地范围之外,则必须使用显式类型的变量 - 您可以通过鼠标悬停在变量上来查找变量的类型(或者查看它调试器) - 它会告诉你你必须使用的完整类型。