gpt4 book ai didi

LINQ,我可以用方法语法编写更干净的连接吗?

转载 作者:行者123 更新时间:2023-12-04 05:55:05 25 4
gpt4 key购买 nike

使用酒吧

如果我想使用查询语法加入,我会这样做。

from a in db.authors
join ta in db.titleauthors on a.au_id equals ta.au_id
join t in db.titles on ta.title_id equals t.title_id
join s in db.sales on t.title_id = s.title_id
select new { a.au_lname, t.title1, s.qty }

使用方法语法
db.authors
.Join(db.titleauthors,
a => a.au_id,
ta => ta.au_id,
(a, ta) => new {a, ta})
.Join(db.titles,
z => z.ta.title_id,
t => t.title_id,
(z, t) => new { z.a, z.ta, t })
.Join(db.sales,
z => z.t.title_id,
s => s.title_id,
(z, s) => new { z.a, z.ta, z.t, s })
.Select(z => new { z.a.au_lname, z.t.title1, z.s.qty })

我想知道是否有一种优雅的方式来处理这条线 (z, X) => new { z.Y1, z.Y2, z.Y3... , X }
也许像 (z, X) => z.push(X)
所以我不必把所有东西都写出来。

这样的事情是否存在或可能?

最佳答案

不。基本上查询表达式的存在是为了让这些东西远离你。没有特别简单的方法可以模仿透明标识符。

我发现当您使用透明标识符时,使用查询表达式语法几乎总是更清晰。两者都绝对值得了解,因为非常简单的查询使用方法语法更清晰,但查询越复杂,使用查询表达式就越容易阅读。

当然,这是假设它都可以用方法表达式表示。不要忘记,您可以在不改变含义的情况下将查询分解为单独的语句,因此如果您确实需要调用没有查询表达式等效项的方法,我有时会发现最好将其分开如下:

var foo = from x in y
join a in b on x.Z equals a.Z
select new { a, x };

var bar = foo.Skip(5)
.Take(10)
.ToList();

我发现这比仅使用方括号将两种语法形式混合在一起更干净。

关于LINQ,我可以用方法语法编写更干净的连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9593333/

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