【问题标题】:left join using lambda expression使用 lambda 表达式左连接
【发布时间】:2011-07-12 14:23:12
【问题描述】:

我有 tableA 和 tableB。
我想使用 lambda 表达式执行左连接。这是相等的sql语句:

SELECT *
FROM tableA A
    LEFT JOIN tableB B ON A.userId=B.userId

如何使用 lambda 表达式做到这一点?

【问题讨论】:

标签: c# .net entity-framework lambda


【解决方案1】:

It's usually an error to use an explicit join in LINQ to Entities.

改为使用导航属性:

var q = Context.TableAs.Select(a => new { a.Foo, a.TableB.Bar });

LINQ to Entities 将合并空引用。所以如果a.TableBnull 对于TableAs 中的某些记录,那么a.TableB.Bar 将返回null 而不是给你一个空引用异常。所以它的行为类似于 SQL LEFT JOIN

【讨论】:

  • @Naor:通常,正确的做法是添加它们。您应该使用显式的joins,主要是仅当您出于某种原因无法添加它们时。
  • @Naor:就像我说的,大多数情况下,你不知道。您还没有说服我您有充分的理由省略导航。导航是关联实体的正确方式
  • @Craig Stuntz:学习的欲望如何?如何在 lambda 语法中进行左连接?
  • @Naor:这是一个不同的问题。你问如何用 L2E 做到这一点。在 L2E 中正确的方法是使用导航。您想在 L2O 中执行此操作,则可以在“正确”序列上使用 Join()DefaultIfEmpty()。但是对于 L2E,通常不要这样做。
  • 我继承了一个无需使用任何键即可连接多个表的数据库。 (在任何人对 cme​​ts 进行权衡之前 - 我已经知道并且一旦我可以更换 POS 我会,但 atm 我不能。)没有它们我无法创建导航,所以我必须加入代码,我个人偏好使用 Lambda,在 C# 中对我来说更有意义。
猜你喜欢
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 2013-05-18
  • 1970-01-01
相关资源
最近更新 更多