过滤实体设定拉姆达
问题描述:
所以我有这个服务器过滤实体设定拉姆达
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不包含在结果集中。
答
您的代码当前声称包含任何具有任意 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));
@乔恩......有一个有点问题仍然this..So当我得到所有与位置和recPositions和人include..then过滤掉任何有recPosition .posRank!= 0 ..这似乎是在做什么......是我例如有一个中心位置,我在RecPosition实体中的计数为2.一个人的等级为1,一个等级为0 ..这个过滤器似乎删除了他们,因此RecPosition似乎现在是空的。希望这是有道理的.. – gevjen 2011-02-12 14:01:26