使用 lambda 过滤实体集

发布于 2024-10-16 20:48:31 字数 478 浏览 2 评论 0原文

所以我的服务器上有这个,

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 的记录...但由于某种原因它不是。有人可以看一下,如果我遗漏了什么,请告诉我。我再次希望所有为 0 的 PosRank 记录不包含在结果集中。

So I have this on the server

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 have similar/same? code on the client. But figured this should be done on the server so I dont potentially bring back thousands of records. Im expecting the (rp => rp.PosRank != 0) to omit any records that have a 0...but for some reason it isnt. Can someone take a look and let me know if I am missing something. Again i want all PosRank records that are 0 to not be included in result set.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

送君千里 2024-10-23 20:48:31

您的代码当前表示要包含具有非零 PosRank 的任何 RecPositions 的任何实体。

它不会过滤实体中返回的 RecPositions - 它会过滤它们的父类型 (Pos)。

如果您只想包含 Pos 实体,其中所有 RecPositions 都具有非零 PosRank,您只需:

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

如果您确实想要 RecPosition 值(而不是 Pos 值),您可能需要:

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

Your code is currently saying to include any entities which have any RecPositions with a non-zero PosRank.

It's not filtering the RecPositions returned within the entities - it's filtering their parent type (Pos).

if you only want to include Pos entities where all the RecPositions have a non-zero PosRank, you simply want:

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

If you really want the RecPosition values (instead of the Pos values), you might want:

return entitySet.SelectMany(x => x.RecPositions)
                .Where(rp => rp.PosRank != 0));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文