ef core 开发实践:多种 Left Join(左连接)查询写法
本文记录了使用 efcore 中多种左连接查询的写法。
场景示例
- 订单表:Order
- 订单明细表:OrderItem,可以为空
public class Order
{
public int Id { get; set; }
public string OrderNo { get; set; }
}
public class OrderItem
{
public int Id { get; set; }
public int OrderId { get; set; }
public string ProductName { get; set; }
}
一、LINQ 查询语法
var query =
from o in context.Orders
join oi in context.OrderItems on o.Id equals oi.OrderId
into items
from oi in items.DefaultIfEmpty()
select new
{
o.OrderNo,
ProductName = oi != null ? oi.ProductName : null
};
二、Linq方法语法(GroupJoin + SelectMandy)
var query = context.Orders
.GroupJoin(
context.OrderItems,
o => o.Id,
oi => oi.OrderId,
(o, items) => new { o, items }
)
.SelectMany(
x => x.items.DefaultIfEmpty(),
(x, oi) => new
{
x.o.OrderNo,
ProductName = oi != null ? oi.ProductName : null
}
);
三、导航属性
模型已配置导航属性:
public class Order
{
public int Id { get; set; }
public string OrderNo { get; set; }
public ICollection<OrderItem> OrderItems { get; set; }
}
查询写法:
var query = context.Orders.Select(o => new
{
o.OrderNo,
o.OrderItems
});
以上就是 ef core 左连接的三种查询写法。
本文来自博客园,作者:ryan-deng,转载请注明原文链接:https://www.cnblogs.com/denglei1024/p/19487047

浙公网安备 33010602011771号