C# 带导航列表的EF Lambda Linq查询
我似乎无法用正确的选择来完成我的linq语句。 到目前为止,我有以下几点,但问题是它只会导致“选择”CategoryTypes,而我需要对所有内容进行选择: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)
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();