使用pubs
如果我想使用查询语法加入,我会这样做。
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)
所以我不必写出来。
这样的事情是存在还是可能?
答案 0 :(得分:3)
没有。基本上存在查询表达式是为了使这些东西远离你。没有特别简单的模仿透明标识符的方法。
我发现当你点击透明标识符时,使用查询表达式语法几乎总是更清晰。绝对值得了解两者,因为非常简单的查询使用方法语法更清晰,但查询越复杂,使用查询表达式读取的可能性就越大。
当然,假设它可以用方法表达式表示。不要忘记你可以在不改变含义的情况下将查询分解为单独的语句,所以如果做需要调用没有查询表达式的方法,我有时会发现最好把它分开像这样:
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();
我发现这比使用括号将两种语法形式混合在一起更清晰。