C# 尝试从实体框架核心中的实体加载单个子属性时发生异常
我试图在我的“物质”实体中只获取一个“数据” 我可以从这句话中得到所有信息:C# 尝试从实体框架核心中的实体加载单个子属性时发生异常,c#,linq-to-sql,entity-framework-core,linq-to-entities,C#,Linq To Sql,Entity Framework Core,Linq To Entities,我试图在我的“物质”实体中只获取一个“数据” 我可以从这句话中得到所有信息: .ThenInclude(matter => matter.Data) 但我只想要1=>其中有最新创建日期 下面是类似的东西,但它不起作用 .ThenInclude(matter => matter.Data.OrderByDescending(i => i.CreatedDate).FirstOrDefault()) 我的出现异常。然后include()。它说表达式应该表示一个属性。数据不是一种
.ThenInclude(matter => matter.Data)
但我只想要1=>其中有最新创建日期
下面是类似的东西,但它不起作用
.ThenInclude(matter => matter.Data.OrderByDescending(i => i.CreatedDate).FirstOrDefault())
我的出现异常。然后include()
。它说表达式应该表示一个属性。数据不是一种属性吗
我也在没有数据的情况下尝试过,但没有运气
我的例外是:
ThenInclude属性lambda表达式
'matter=>{from MatterData i in matter.Data orderby[i].CreatedDate desc select[i]=>FirstOrDefault()}.Data'无效。表达式应表示属性访问:“t=>t.MyProperty”。
要将在派生类型上声明的导航作为目标,请指定目标类型的显式类型lambda参数,例如“(派生d)=>d.MyProperty” 下面是我如何尝试获取“Data”的单个属性
public async Task<Claim> GetClaim(int id)
{
var query = _autoContext.Claims
.Include(claim => claim.Matter)
.ThenInclude(matter => matter.Data.OrderByDescending(i => i.CreatedDate).FirstOrDefault().Data)
.AsQueryable();
var result = await query.FirstOrDefaultAsync(c => c.Id == id);
return result;
}
这一排
.ThenInclude(matter => matter.Data.OrderByDescending(i => i.CreatedDate).FirstOrDefault().Data)
这是完全错误的。不能在包含表达式中包含“order by”和FirstOrDefault()操作。基本上,Include表达式定义了该查询需要在SQL中加入哪些表。
所以你需要这样的东西:
.ThenInclude(matter => matter.Data)
.Select(claim => new {
claim,
MatterData = claim.Matter.Data.OrderByDescending(i => i.CreatedDate).FirstOrDefault().Data
});
谢谢你的回答。我刚刚找到了另一种方法!我正在使用AutoMapper,因此我最终在CreateMap.formMember调用中执行orderby。不确定哪一个更好,但我将使用这两种方法进行测试。
.ThenInclude(matter => matter.Data)
.Select(claim => new {
claim,
MatterData = claim.Matter.Data.OrderByDescending(i => i.CreatedDate).FirstOrDefault().Data
});