gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:53:52 26 4
gpt4 key购买 nike

我正在尝试将此 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com