我正在尝试将此 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();
基本上p
和q
和r
是这里的透明标识符。你得到了三个,因为你有两个连接和一个后续的 from
子句。
关于c# - 使用多个连接将 linq 转换为 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13179802/