从 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?)

LINQ to SQL(基于3个表插入事实表)

Linq C#方法语法,连接3个表

需要一种方法来使用实体框架核心中的C#Linq从第二个表中检索数据

如何通过循环 db [C# MVC & LINQ] 中的 3 个表来映射数据以对应表头