c# - 使用多个连接将 linq 转换为 lambda

标签 c# linq lambda

我正在尝试将此 linq 查询转换为 lambda

 var query = (from a in context.Table_A
                         join u in context.Table_B  on a.scored equals u.userid
                         join u2 in context.Table_B on a.scorer equals u2.userid
                         from cs in a.Table_C //(Table_A is related to Table_C)
                         where (a.date>= startdate && a.date < enddate)
                         select new MSViewModel
                         {
                             scored= u.User.name,
                             scorer= u2.User.name,
                             subject_name = cs.Subject.name,
                             score = cs.score,
                             categoryid = cs.id,
                         })
                            .AsEnumerable()
                            .GroupBy(t => t.scored)
                            .ToList();

到目前为止,这就是我所拥有的。我有点不知道下一步该怎么做。

 var tobi = db.Table_A.Join(db.Table_B,a=>a.scored,u=>u.userid,
                    (a,u) => new {scored=u.User.name });
                    db.Table_A.Join(db.Table_B,a1=>a1.scorer,u2=>u2.userid, 
                    (a,u2)=> new {scorer= u2.User.name});

最佳答案

首先,我同意 Arran 的评论:查询表达式将更易于处理。我绝对支持在有意义的地方使用 lambda 形式,但在查询表达式中联接通常更简单。

话虽如此,基本上还是要模仿transparent identifiers .下面的代码未经测试,但在我看来似乎有些可信。

var query = context.Table_A
                   .Join(context.Table_B, a => a.scored, u => u.userid,
                         (a, u) => new { a, u })
                   .Join(context.Table_B, p => p.a.scorer, u2 => u2.userid,
                         (p, u2) => new { p, u2 })
                   .SelectMany(q => q.p.a.TableC, (q, cs) => new { q, cs })
                   .Where(r => r.q.p.a.date >= startdate && r.q.p.a.date < enddate)
                   .Select(q => new MSViewModel {
                                  scored= r.q.p.u.User.name,
                                  scorer= r.q.u2.User.name,
                                  subject_name = r.cs.Subject.name,
                                  score = r.cs.score,
                                  categoryid = r.cs.id,
                                })
                   .AsEnumerable()
                   .GroupBy(t => t.scored)
                   .ToList();

基本上pqr是这里的透明标识符。你得到了三个,因为你有两个连接和一个后续的 from 子句。

关于c# - 使用多个连接将 linq 转换为 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13179802/

相关文章:

lambda - 如何使用Optional仅使用高阶函数来检查Web服务的返回是否为null并避免noSuchElementException

node.js - 如何在 AWS RDS 上配置 MySQL 文档存储

c# - 如果未呈现按钮,客户端能否以编程方式获取按钮单击事件?

c# - 多个 ContextMenuStrip 的 ToolStripMenuItem

c# - JavaScript 日历问题

c# - 林克/C# : How to split List into variable length chunks based on list item information?

c# - 如何使用 Entity Framework 从mysql获取最后插入的id

mysql - ASP.NET Core - 好友系统

linq - 如何使用匿名类型来获取订单?

c# - 在 C# 中使用 Lambda 表达式获取对象属性到字符串