2011-03-04 6 views
2

다음 쿼리를 쿼리 결과 (멤버)를 반환하는 메서드로 캡슐화하려고합니다.LINQ : 메서드 매개 변수로 var 전달을 지원하지 않습니다.

그런 다음 반환 된 결과를 쿼리하는 다른 쿼리를 수행하려고합니다.


만들려는 메서드 내에서 매개 변수 유형 또는 결과 유형으로 var를 사용할 수 없다는 것을 알았습니다. 내 인생을 단순하게하기 위해이 지원을하고 싶었습니다.

추가 세부 정보 : MembersItemsControl.Items 속성이 ObservableCollection에 상속 클래스 인 형태의 '사용자'는 개인 회원의 _ItemsSourceAsList '를 가지고있다.


의견이 있으십니까?


쿼리 코드

은 다음과 같습니다 : 당신은 항상 IEnumerable<Member>로 LINQ 수집을 통과 할 수


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

+0

'MembersItemsControl.Items'의 유형은 무엇입니까? –

답변

3

. MemberMembersItemsControl.Items 항목의 유형이

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; 
} 

.

+0

명확히하기 위해 멤버 유형은 IEnumerable이므로 멤버를 IEnumerable 유형의 매개 변수에 전달할 수 있습니다. – DOK

+0

IEnum ** e ** rable을 반환하면 꽤 쓸모가 없습니다. LINQ에 유용한 모든 것을 수행하려면 IEnumerable (IEnumerable )의 일반 구현을 사용해야합니다. – GenericTypeTea

+0

동의합니다. 수정 됨. – rotman

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에 암시 적으로 형식화 된 지역 변수를 허용합니다. 변수를 전달해야하거나 로컬 범위 외부로 반환해야하는 경우 명시 적으로 입력 한 변수를 사용해야합니다. 변수를 마우스로 가리키면 변수 유형을 알 수 있습니다 (또는 디버거) - 사용해야 할 전체 유형을 알려줍니다.

관련 문제