linq中的左外连接
Posted
技术标签:
【中文标题】linq中的左外连接【英文标题】:Left outer join in linq 【发布时间】:2011-04-27 15:07:09 【问题描述】:我有以下查询,但我不知道如何在表 1 上进行左外连接。
var query = (from r in table1
join f in table2
on r.ID equals f.ID
select new
r.ID,
r.FirstName,
r.LastName,
FirstNameOnRecord =
(f != null ? f.FirstName : string.Empty),
LastNameOnRecord =
(f != null ? f.LastName : string.Empty),
NameChanged =
(f != null
? (f.FirstName.CompareTo(r.FirstName) == 0
&& f.LastName.CompareTo(r.LastName) == 0)
: false)
).ToList();
【问题讨论】:
The .NET Standard Query Operators 对我来说非常有用,因为我几年前开始使用 linq。该链接包含大量示例和定义(您需要仔细阅读“加入”部分,特别是 GroupJoin)。 【参考方案1】:请参阅 this 或 this 示例以了解更多信息,您的情况可能是这样的-
var query = from r in table1
join f in table2
on r.ID equals f.ID into g
from f in g.DefaultIfEmpty()
select new
r.ID
, r.FirstName
, r.LastName
, FirstNameOnRecord = (f != null ? f.FirstName : string.Empty)
, LastNameOnRecord = (f != null ? f.LastName : string.Empty)
, NameChanged = (f != null ? (f.FirstName.CompareTo(r.FirstName) == 0
&& f.LastName.CompareTo(r.LastName) == 0) : false)
).ToList();
【讨论】:
【参考方案2】:这是left outer join 的详细分类。
【讨论】:
【参考方案3】:你见过these examples吗?您可能对 this part 感兴趣,了解 Linq 中的 Left Outer Join。
【讨论】:
【参考方案4】:使用 lambda 表达式
db.Categories
.GroupJoin(
db.Products,
Category => Category.CategoryId,
Product => Product.CategoryId,
(x, y) => new Category = x, Products = y )
.SelectMany(
xy => xy.Products.DefaultIfEmpty(),
(x, y) => new Category = x.Category, Product = y )
.Select(s => new
CategoryName = s.Category.Name,
ProductName = s.Product.Name
)
【讨论】:
以上是关于linq中的左外连接的主要内容,如果未能解决你的问题,请参考以下文章