以下LINQ的扩展方法是什么?
var qry = from a in context.A_Collections
from b in context.B_Collections
where a.PK == b.PK
select
new {
A_key = a.PK,
A_Value = a.Value,
B_Key = b.PK,
B_value = b.value
};
我的意思是
(不完全的)
var query = context.A_Collections.
Where(
a => a.PK == context.B_Collections.Select(b => b.PK)).
Select(
x => new {
A_key = a.Pk,
A_Value = a.Value,
B_Key = b.PK,
B_value = b.value
}
);
答案 0 :(得分:5)
后续“from”子句转换为SelectMany
次来电:
var qry = context.A_Collections
.SelectMany(a => context.B_Collections,
(a, b) => new { a, b })
.Where(x => x.a.PK == x.b.PK)
.Select(x => new { A_key = x.a.PK,
A_value = x.a.Value,
B_key = x.b.PK,
B_value = x.b.Value });
“x”位是由于引入了透明标识符。
请注意,调用Join
可能比使用SelectMany
更有效(具体取决于具体情况),但这是您开始使用的查询的更直接的翻译。
答案 1 :(得分:2)
看起来你正在尝试加入,所以它会是:
var query = context.A_Collections.Join(
context.B_Collections,
a => a.PK,
b => b.PK,
(a, b) => new {
A_key = a.PK,
A_value = a.Value,
B_Key = b.PK,
B_value = b.value
});
编辑:正如Jon Skeet指出的那样,编译器完成的实际翻译将使用SelectMany,尽管使用group可能会更有效。
答案 2 :(得分:0)
这将是:
context.A_Collections.Include("B")
.Where(a => a.PK == a.B.PK)
.Select(a =>
new {A_key = a.PK,
A_Value = a.Value,
B_Key = a.B.PK,
b_value = a.B.value } );
答案 3 :(得分:0)
尝试使用Resharper,如果您愿意,可以帮助您转换Linq方法中的所有Linq查询。