如何在多个字段不区分大小写的情况下编写Linq左联接 [英] How to write Linq left join with multiple fields where one is case insensitive
本文介绍了如何在多个字段不区分大小写的情况下编写Linq左联接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
将其转换为左联接的首选方法是什么?这是Linq to Objects(不是SQL).
What is preferred way to convert this to a Left Join? This is Linq to Objects (not SQL).
var result =
(
from e in entries
from r in results
where r.PropertyId == e.PropertyId &&
e.ValueAsString.Equals(r.Value, StringComparison.InvariantCultureIgnoreCase)
select new
{
Result = r,
Entry = e
}
)
.ToList();
问题:可读性与效率之间的权衡.应该尝试避免ToLowerInvariant()吗?
Issues: Tradeoff between readability vs. efficiency. Should try to avoid ToLowerInvariant()?
推荐答案
您写的是cross join
,而不是left join
var result =
(
from e in entries
join r in results
let ev=e.ValueAsString.ToLower()
let rv=r.Value.ToLower()
on new{e.PropertyId,ev} equals new {r.PropertyId,rv } into lg
from r in lg.DefaultIfEmpty()
select new
{
Result = r,
Entry = e
}
)
.ToList();
这篇关于如何在多个字段不区分大小写的情况下编写Linq左联接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文