【发布时间】:2014-08-12 01:44:21
【问题描述】:
将其转换为左连接的首选方法是什么?这是 Linq to Objects(不是 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()?
【问题讨论】:
-
你写的是交叉连接,不是左连接
-
不完全确定您是否需要查询本身或仅比较字符串方面的帮助,但要找到更好的性能方面,您可以运行测试
"abc".Equals("AbC", StringComparison.InvCultIC)与"abc".Equals("AbC".ToLowerInv())。当然,您也可以更疯狂地使用测试用例。 -
我应该提到每个条目只能有 0 或 1 个结果匹配。
-
我知道这是一个交叉,但我不知道“join”关键字会创建一个内部查找以避免交叉比较(来自用户@Servy)。谢谢。这恰好适用于非常小的集合。
标签: c# linq left-join linq-to-objects