2010-06-18 4 views
2

여기 내 검색어입니다.LINQ 쿼리 필터링

var query = from g in dc.Group 
      join gm in dc.GroupMembers on g.ID equals gm.GroupID 
      where gm.UserID == UserID 
      select new { 
       id = g.ID, 
       name = g.Name, 
       pools = (from pool in g.Pool 
       // more stuff to populate pools 

그래서 좀 필터링을 수행해야하지만, 내가

var filter = query.Where(f => f.pools.[no access to list of columns] 

를 필터링 할 때 나는 "풀"내 모든 항목에 액세스 할 수 없습니다. 아무도 내가 어떻게 접근 할 수 있는지 알고 있니?

는 내가 뭘하고 싶은 것은 이것이다 :

var filterbyGame = query.Where(f = > f.pools.GameName == "TestGame"); 

가 내가이 설정을 Thew 보낸 사람의 바깥으로도 가능하다면 알려주세요.

감사합니다.

Where(f => f.pools.Any(p => p.GameName == "TestGame")) 
+1

,'pools'는 풀 개체의 컬렉션입니다. 자체에는'GameName' 속성이 없습니다. 일치를 어떻게 수행 하시겠습니까? 적어도 GameName이 지정된 풀이 하나있는 쿼리의 모든 개체를 일치 시키시겠습니까? 또는 모든 풀에 대해'GameName'이 인수와 동일한 지 확인하십시오. –

+0

동일한 GameName을 가진 모든 풀과 일치시킵니다. 그래서 gamename이 "Mega"라고 불리는 풀을 반환하십시오. –

답변

2

pools은 다음과 같습니다 f는 작동해야이 같은 IEnumerable을 <>

뭔가가 있기 때문에 쿼리에

+0

그래서 나는 이것을 시도했다. var test = query.Where (f => f.pools.Any (p => p.GameName == "Test")); 작동하지 않습니다. –

+0

@ Jack Marchetti - f.pools에 GameName이 일치 했습니까? 항상 두 번 확인하고 확인하십시오. –

+0

그래, 나는 긍정적이다. 나는 복사본과 과거 eon == "GameName"을 수행했는데 .ToLower()를 시도해 보았습니다. –

4

어디 (=> f.pools.GameName F) 할 수 없습니다 단일 인스턴스가 아니라 열거 형 그래서 열 이름을 가져 오지 못합니다.

당신은 같은에 필터를 변경해야합니다 : 물론

var filterByGame = query.Where(f => f.pools.Any(p => p.GameName == "TestGame"));