从 3 个表 LINQ .NET 中使用 Include
Posted
技术标签:
【中文标题】从 3 个表 LINQ .NET 中使用 Include【英文标题】:Using Include from 3 tables LINQ .NET 【发布时间】:2021-11-23 12:11:34 【问题描述】:我一直在研究如何使用 LINQ 创建查询(我完全是新手)。
我的目标是创建一个表,该表将使用这 3 个模型中的查询,并根据 CustomerOrder 模型中的 OrderDate 过滤它们:
class Item
[Key]
public int ItemId get; set;
public string ItemName get; set;
public string ItemDescription get; set;
public decimal ItemCost get; set;
public string ItemImage get; set;
public virtual ICollection<ItemsInOrder> ItemsInOrders get; set;
class ItemsInOrder
public int OrderNumber get; set;
public int ItemId get; set;
public virtual Item Item get; set;
public virtual CustomerOrder CustomerOrderNavigation get; set;
class CustomerOrder
public int OrderNumber get; set;
public DateTime OrderDate get; set;
public virtual ICollection<ItemsInOrder> ItemsInOrders get; set;
var testQuery = _context.Items
.Include(o=>o.ItemsInOrders)
.ThenInclude(i=>i.OrderNumberNavigation);
上面的查询不允许我访问除 Items 之外的其他表的属性。
【问题讨论】:
【参考方案1】:我设法通过使用条件语句解决了这个问题。
var testQuery = _context.Items.Select(i => i);
if(yearParameter != 0)
testQuery = testQuery
.Include(o => o.ItemsInOrders)
.Where(x => x.ItemsInOrders.Any(x => x.CustomerOrderNavigation.OrderDate.Year == yearParameter));
很确定这仍然可以优化,但只要它有效,我会接受它。
PS:(请原谅我的 lambda 表达式的命名约定,仅用于问答目的)
【讨论】:
以上是关于从 3 个表 LINQ .NET 中使用 Include的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Asp.net MVC C# 中使用 Linq 从多个表中选择具有最大计数值的记录
在 ASP.Net MVC 的视图中使用 2 个表(使用不同的模型返回 2 个 LINQ?)