【问题标题】:LINQ - Limit result based on count returned by custom functionLINQ - 根据自定义函数返回的计数限制结果
【发布时间】:2014-08-07 23:55:49
【问题描述】:

我有以下代码,并希望在 LINQ 中返回此查询的有限子集。有限子集将 u.ID 作为函数的参数,并计算另一个表中与 u.ID 关联的记录数。

到目前为止,这就是我所拥有的。

 var res = from u in db.Users
                      where  id == u.WorkGroupID && jobCount(u.ID) > 0
                      select
                new
                {
                    ArtistID = u.ID,
                    ArtistName = u.FirstName + " " + u.LastName
                };

如何修改此查询以根据与每个 u.ID 关联的计数值限制返回记录的数量?

编辑:

下面的新查询。最后一行将最后一个 LINQ 查询的列表返回给调用者。

  var res = from u in db.Users
                      where  id == u.WorkGroupID
                      select
                new
                {
                    // SELF
                    ArtistID = u.ID,
                    ArtistName = u.FirstName + " " + u.LastName
                };

            var res2 = res.ToList<dynamic>();
            var res3 = from row in res2.AsEnumerable()
                       where jobCount(row.ArtistID) > 0
                       select new
                         {
                             row.ArtistName,
                             row.ArtistID
                        };

            return res3.ToList<dynamic>();

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    使用群组加入:

    from u in db.Users
    join o in db.Other on u.ID equals o.UserID into grp
    where grp.Any()
    select new
    {
        ArtistID = u.ID,
        ArtistName = u.FirstName + " " + u.LastName
    };
    

    【讨论】:

    • 感谢科里的回复。我得到了回应的查询。我尝试了另一种我发布的方法(编辑我的帖子)。我需要验证它是否正常工作,但到目前为止我没有看到任何计数为 0 的值。我对 LINQ 真的很陌生,所以我的想法非常原始并使用现有代码。我将继续对此进行调查。我会投赞成票。可能我的做法有点多余。
    • 我刚刚编辑它以使用Any() 而不是Count() &gt; 0。无论如何,SQL Optimizer 可能会为我修复它,但理论上它的性能会更好。
    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 2012-06-08
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多