2011-03-04 56 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到允許隱式鍵入局部變量。如果您必須傳遞變量或將其返回到本地範圍之外,則必須使用顯式類型的變量 - 您可以通過鼠標懸停在變量上來查找變量的類型(或者查看它調試器) - 它會告訴你你必須使用的完整類型。