C# 使用lambda筛选实体集
所以我在服务器上有这个C# 使用lambda筛选实体集,c#,lambda,wcf-ria-services,C#,Lambda,Wcf Ria Services,所以我在服务器上有这个 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 =&g
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));
}
public IQueryableGetPos(int-programmaid)
{
var entitySet=_posRepository.All()。其中(x=>x.ProgramID==ProgramID)。包括(“RecPositions.Person”);
返回entitySet.Where(x=>x.RecPositions.Any(rp=>rp.PosRank!=0));
}
我有相似的/相同的吗?客户端上的代码。但我认为这应该在服务器上完成,这样我就不会带回数千条记录。我希望(rp=>rp.PosRank!=0)能省略任何有0的记录…但由于某些原因它不是。如果我遗漏了什么,有人能看一下并告诉我吗。同样,我希望所有0的PosRank记录都不包含在结果集中。您的代码当前表示包含任何具有非零PosRank的RecPositions的实体 它不是过滤实体中返回的RecPositions,而是过滤它们的父类型(Pos) 如果您只想包括所有RecPositions具有非零PosRank的Pos实体,您只需要:
return entitySet.Where(x => x.RecPositions.All(rp => rp.PosRank != 0));
如果您确实需要重新定位值(而不是Pos值),您可能需要:
return entitySet.SelectMany(x => x.RecPositions)
.Where(rp => rp.PosRank != 0));
@Jon…这方面还有一点问题..所以当我得到所有的职位和recPositions以及包括在内的人..然后过滤掉任何有recPosition.posRank的职位0..这似乎在做的是..例如,我有一个中心位置,我的RecPosition实体中有一个计数2。一个人的排名为1,另一个人的排名为0。该筛选器似乎同时删除了这两个人,因此RecPosition现在似乎为空。希望这有意义。@Jon。。经过一些工作,这正是我所需要的。我走了另一个方向,你把我带到了另一个方向。我基本上做了你留下的第二个例子。我最初需要对该职位进行筛选,但在那之后,我真的不再需要该实体,因此我执行了selectmany并重新编写了一些其他代码。在服务器上这样做要好得多,因为有可能有数千行,这样我们每个位置只带回大约10行…谢谢!