如何编写Linq左连接与多个字段,其中一个是不区分大小写
本文关键字:一个 大小写 不区 Linq 何编写 连接 字段 | 更新日期: 2023-09-27 18:17:44
将其转换为左连接的首选方法是什么?这是对象链接(不是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()吗?
对于左连接,需要使用DefaultIfEmpty
var result =
(
from e in entries
from r in results.Where(x => x.PropertyId == e.PropertyId)
.Where(x => e.ValueAsString.Equals(x.Value, StringComparison.InvariantCultureIgnoreCase))
.DefaultIfEmpty()
select new
{
Result = r,
Entry = e
}
)
.ToList();
你写的是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();