如何在多个字段不区分大小写的情况下编写Linq左联接 [英] How to write Linq left join with multiple fields where one is case insensitive

查看:76
本文介绍了如何在多个字段不区分大小写的情况下编写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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆