C# 带导航列表的EF Lambda Linq查询

C# 带导航列表的EF Lambda Linq查询,c#,linq,entity-framework,linq-to-entities,C#,Linq,Entity Framework,Linq To Entities,我似乎无法用正确的选择来完成我的linq语句。 到目前为止,我有以下几点,但问题是它只会导致“选择”CategoryTypes,而我需要对所有内容进行选择: var qwe = dc.LeadTypes .Include("DataTypes") .Include("DataTypes.CategoryTypes") .Where<LeadType>(x => x.Disabled == false)

我似乎无法用正确的选择来完成我的linq语句。 到目前为止,我有以下几点,但问题是它只会导致“选择”CategoryTypes,而我需要对所有内容进行选择:

var qwe = dc.LeadTypes
            .Include("DataTypes")
            .Include("DataTypes.CategoryTypes")
            .Where<LeadType>(x => x.Disabled == false)
            .SelectMany(x => x.DataTypes)
            .Where(x => x.Disabled == false)
            .SelectMany(x => x.CategoryTypes)
            .Where(x => x.Disabled == false)
            .ToList();
我这样做的原因是,我在三个表中的每个表上都有一个禁用的列,我不想返回这些行


谢谢

我不确定是否理解您的要求,但请尝试在启用所有it实体的情况下返回LeadType

var qwe = (from lt in dc.LeadTypes
           where !lt.Disabled
           select new LeadType
           {
               DataTypes = from dt in lt.DataTypes
                           where !dt.Disabled
                           select new DataType
                           {
                               CategoryTypes = dt.CategoryTypes.Where(ct => !ct.Disabled),
                               // rest of dt values
                           }
               // rest of lt values
           }).ToList();
如果使用include(),则无法将列投影到其他形状。 具有投影的列不能具有相同的名称


不清楚您想要什么结果-根据
类别类型,您将排除哪些
LeadType
实体?我认为。包含并不那么容易,有特定的规则何时起作用,何时不起作用(抱歉,找不到这方面的参考…),如果您的问题是包含“似乎”不起作用,您可以尝试(包括在结果中):var result=(dc.LeadTypes.Where(x=>x.Disabled==false)。SelectMany(x=>x.DataTypes)。Where(x=>x.Disabled==false)。SelectMany(x=>x.CategoryTypes)。Where(x=>x.Disabled==false)。包括(“数据类型”)。包括(“数据类型.CategoryTypes”)。ToList();谢谢,我将其与之绑定,但导致问题的是SelectMany,因为它返回导航类型的可枚举项。不太有效,这一直限制到父列表LeadTypes!仅返回未设置DataTypes表和Categories表的Diabled列的LeadTypes。您希望从查询中得到什么?选择LeadT类型、数据类型和CategoryTypes。目前它只是返回CategoryTypes。好的,让我检查一下:返回启用的LeadTypes、启用的数据类型和启用的CategoryTypes?
var qwe = (from lt in dc.LeadTypes
           where !lt.Disabled
           select new LeadType
           {
               DataTypes = from dt in lt.DataTypes
                           where !dt.Disabled
                           select new DataType
                           {
                               CategoryTypes = dt.CategoryTypes.Where(ct => !ct.Disabled),
                               // rest of dt values
                           }
               // rest of lt values
           }).ToList();
var qwe = dc.LeadTypes.Where(x => x.Disabled == false)
        .SelectMany(x => x.DataTypes.Where(y => y.Disabled == false), (lead, data) => new
        {
            disabledLeadType = lead.Disabled,
            disabledDataType = data.Disabled,
            idDataType = data.Id,
            categoryType = data.CategoryTypes
        }
        )
        .SelectMany(x => x.categoryType.Where(y => y.Disabled == false), (lead_data, category) => new
        {
        lead_data.disabledLeadType, lead_data.disabledDataType, lead_data.idDataType,
        disabledCategoryType = category.Disabled,
        idCatergoryType = category.Id
        }
        )
        .ToList();