C# 正在尝试解析“包含路径表达式必须引用在类型上定义的导航属性”
目前,我正在使用IQueryable,无法使部分查询正常工作。我得到一个System.ArgumentException,其描述在本文标题中 我将从我需要的TSQL查询开始,但使用IQueryable代码:C# 正在尝试解析“包含路径表达式必须引用在类型上定义的导航属性”,c#,entity-framework,linq,tsql,C#,Entity Framework,Linq,Tsql,目前,我正在使用IQueryable,无法使部分查询正常工作。我得到一个System.ArgumentException,其描述在本文标题中 我将从我需要的TSQL查询开始,但使用IQueryable代码: SELECT w.*,wr.*,c.* FROM WorldRegion w JOIN WorldRegionResource wr ON w.Id = wr.Id JOIN Culture c ON wr.CultureId = c.Id WH
SELECT w.*,wr.*,c.*
FROM WorldRegion w
JOIN WorldRegionResource wr
ON w.Id = wr.Id
JOIN Culture c
ON wr.CultureId = c.Id
WHERE c.CultureName = 'en-US'
现在我来破解密码:
以下是实体结构:
public class WorldRegion
{
public virtual ICollection<WorldRegionResource> WorldRegionResources { get; set; }
}
public class WorldRegionResource
{
public Culture Culture { get; set; }
}
public class Culture
{
public string CultureName { get; set; }
}
最初我尝试更改查询。包括引发异常的查询:
query.Include(w => w.WorldRegionResources.Where(wr => wr.Culture.CultureName == "en-US"));
我一直在寻找解决办法,但没有成功。
我甚至尝试过构建匿名查询:
query.Include(w => w.WorldRegionResources.Select(wr => wr.Culture));
query.Select(w => new
{
WorldRegion = w,
WorldRegionResource = w.WorldRegionResources.Select(wr => new
{
WorldRegionResource = wr,
Culture = wr.Culture.CultureName == "en-US"
})
});
但这产生了与初始查询相同的结果。SQL Server探查器甚至无法识别“en-US”参数
提前感谢您的时间,并感谢您提供的任何帮助
罗尼我相信你必须告诉这些元素它们映射到哪个实体 尝试将外键属性添加到外键id
public class WorldRegion
{
public virtual ICollection<WorldRegionResource> WorldRegionResources { get; set; }
}
public class WorldRegionResource
{
[ForeignKey(nameof(Culture))]
public int CultureId { get; set; }
public virtual Culture Culture { get; set; }
}
public class Culture
{
public string CultureName { get; set; }
}
这可能是因为你没有打电话给ToList,你能告诉我这个查询返回你的数据或查询吗?IQueryable query=repository.Queryable;query.Includew=>w.WorldRegionResources.Selectwr=>wr.Culture;如果没有结果,答案是打电话给报税员,这不是问题所在。他在Include中有一个WHERE条件,这是不允许的。这不会解决任何问题。查看Steven答案中的注释虽然这不是问题所在,但我在一个单独的文件中完成了映射:HasKeyt=>new{t.CultureId,t.Id};
query.Include(w => w.WorldRegionResources.Select(wr => wr.Culture));
query.Select(w => new
{
WorldRegion = w,
WorldRegionResource = w.WorldRegionResources.Select(wr => new
{
WorldRegionResource = wr,
Culture = wr.Culture.CultureName == "en-US"
})
});
public class WorldRegion
{
public virtual ICollection<WorldRegionResource> WorldRegionResources { get; set; }
}
public class WorldRegionResource
{
[ForeignKey(nameof(Culture))]
public int CultureId { get; set; }
public virtual Culture Culture { get; set; }
}
public class Culture
{
public string CultureName { get; set; }
}