2011-02-12 4 views
2

그래서 나는이 서버필터링 엔티티가 람다 설정

public IQueryable<Pos>GetPos(int programID) 
    { 
     var entitySet = _posRepository.All().Where(x => x.ProgramID == programID).Include("RecPositions.Person"); 

     return entitySet.Where(x => x.RecPositions.Any(rp => rp.PosRank != 0)); 
    } 

I 비슷한/같은이에 있나요? 클라이언트의 코드 그러나 이것은 서버에서 수행되어야한다고 생각 했으므로 잠재적으로 수천 개의 레코드를 가져올 필요가 없습니다. 임 (rp => rp.PosRank! = 0)이 0을 가진 레코드를 생략 할 것이라고 기대하고 있습니다.하지만 어떤 이유로 그것이 없습니다. 누군가가 한 번을보고 뭔가를 놓친다면 알려주실 수 있습니까? 다시 나는 0 인 모든 PosRank 레코드가 결과 집합에 포함되지 않기를 바란다.

답변

3

귀하의 코드는 현재 RecPositions에 0이 아닌 PosRank가있는 항목을 포함하려고합니다.

엔터티 내에 반환 된 RecPositions을 필터링하지 않습니다. 부모 유형 (Pos)을 필터링합니다.

모든 RecPositions 0이 아닌 PosRank이 순위 엔티티를 포함 할 경우

, 당신은 단순히 원하는 :

return entitySet.Where(x => x.RecPositions.All(rp => rp.PosRank != 0)); 

당신이 정말로 RecPosition 값을 원하는 경우에 (대신 순위 값) ...

return entitySet.SelectMany(x => x.RecPositions) 
       .Where(rp => rp.PosRank != 0)); 
+0

@ 존을 내가 recPosition이 그 어떤 필터링 include..then 그 모든 위치와 recPositions과 사람을 얻을 때 this..So 여전히 문제의 비트를 가지고, 당신은 할 수 있습니다 .posRank! = 0.이게 뭐하는 것 같아요. 예를 들어 센터 포지션을 가지고 있고 내 RecPosition 엔티티에 2의 카운트를 가지고 있습니다. 한 사람은 1의 등급을 갖고 하나는 0.의 등급을가집니다.이 필터는 RecPosition이 비어있는 것처럼 보이도록 둘 다 제거하는 것처럼 보입니다. . 희망이 말이 이해가 .. – gevjen

+0

@ 존 .. 몇 가지 작업이 정확히 내가 무엇이 필요했습니다. 네가 나를 이끌어 줬다는 또 다른 방향으로 갔다. 나는 기본적으로 당신이 남긴 두 번째 예를했습니다. 원래 위치에 필터를 적용해야하지만 그 후에 엔티티가 더 이상 필요 없어서 selectmany를 수행하고 다른 코드를 수정했습니다. 수천 개의 행이있을 가능성이 있기 때문에 서버에서이 작업을 수행하는 것이 훨씬 더 좋습니다. 이렇게하면 위치 당 약 10 개의 행만 가져올 수 있습니다 ... 감사합니다! – gevjen