在Linq中,何时更喜欢使用SelectMany()表示的联接而不是使用join关键字表示的联接
Linq允许通过使用join关键字或使用 使用where关键字选择many()(即从关键字中选择几个):在Linq中,何时更喜欢使用SelectMany()表示的联接而不是使用join关键字表示的联接,linq,join,Linq,Join,Linq允许通过使用join关键字或使用 使用where关键字选择many()(即从关键字中选择几个): var personsToState = from person in persons join state in statesOfUS on person.State equals state.USPS select new { person, State = st
var personsToState = from person in persons
join state in statesOfUS
on person.State equals state.USPS
select new { person, State = state.Name };
foreach (var item in personsToState)
{
System.Diagnostics.Debug.WriteLine(item);
}
// The same query can be expressed with the query operator SelectMany(), which is
// expressed as two from clauses and a single where clause connecting the sequences.
var personsToState2 = from person in persons
from state in statesOfUS
where person.State == state.USPS
select new { person, State = state.Name };
foreach (var item in personsToState2)
{
System.Diagnostics.Debug.WriteLine(item);
}
我的问题:何时有目的地使用连接样式,何时使用where样式,
一种样式的性能优于另一种样式?联接效率更高,它使用查找类(字典的一种变体,一个键有多个值)查找匹配值。对于本地查询
联接效率更高,因为其键控查找为,但是对于LINQ to SQL(L2S)通过选择many
,您将获得更多里程数。在L2S中,aSelectMany
最终会根据您的查询在生成的SQL中使用某种类型的SQL联接
简而言之,看看C#4.0的作者Joseph/Ben Albahari提出的问题11和12。它们显示不同类型联接的示例,并说明:
使用LINQ to SQL,选择基于多个
联接是最灵活的,并且可以
执行等联接和非等联接。
输入DefaultIfEmpty,您就可以
也要做左外连接
此外,Matt Warren在这个主题上有一篇详细的博客文章,因为它与IQueryable
/SQL有关,请点击此处:
回到要使用哪种查询的问题,您应该使用更具可读性的查询,并允许您轻松地表达自己和清楚地构建最终目标。性能不应该是一个最初的问题,除非您正在处理大型集合,并且已经分析了这两种方法。在L2S中,你必须考虑灵活性<代码> SelectMany < /代码>根据你需要配对数据的方式提供给你。 @ Thomas Levesque谢谢你的更正,英语不是我的母语。