2011-02-12 43 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)); 
    } 

我也有类似的/相同的吗?代码在客户端上。但认为这应该在服务器上完成,所以我不会带回成千上万的记录。我期待(rp => rp.PosRank!= 0)忽略任何有0记录,但由于某种原因它没有。有人可以看看,让我知道如果我失去了一些东西。再次,我想所有PosRank记录是0不包含​​在结果集中。

回答

3

您的代码当前声称包含任何具有任意 RecPositions且具有非零PosRank的实体。

它不过滤在实体内返回的RecPositions - 它正在过滤它们的父类类型(Pos)。

,如果你只希望包括波什实体,其中所有的RecPositions具有非零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

@乔恩......有一个有点问题仍然this..So当我得到所有与位置和recPositions和人include..then过滤掉任何有recPosition .posRank!= 0 ..这似乎是在做什么......是我例如有一个中心位置,我在RecPosition实体中的计数为2.一个人的等级为1,一个等级为0 ..这个过滤器似乎删除了他们,因此RecPosition似乎现在是空的。希望这是有道理的.. – gevjen 2011-02-12 14:01:26