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
});