我的目标是订购一些返回的数据。我喜欢lambda表达式,但它们使我失望。下面的代码遇到了一个很奇妙的错误,那就是关于不将lambda放入include中。
us0
标题具有详细信息,详细信息需要按属性“ FieldName”排序,然后按属性“ LineVersion”排序。错误提示:
在Include中使用的Lambda表达式无效。
经过一番挖掘,我发现了几种避开lambda的方法,但是我对获得具有OrderBy的示例并没有任何运气,而我的大脑此刻正在使我失望,并且希望获得一点点踢,使这项工作。
顺便说一句:当没有OrderBy时,代码可以很好地工作,只是细节不一定总是按我需要的顺序返回。
预先感谢您的帮助 布拉德
答案 0 :(得分:0)
我将使用Select
在Where
之后但在FirstOrDefaultAsync()
之前获取具有OrderBy的实体。像这样:
var header = await _context.Headers
.Include(location => location.HeaderLocation)
.Include(details => details.Details)
.Where(p => p.HeaderId == HeaderId)
.Select(header => new Header
{
// Assign Header values
Location = header.Location,
Details = header.Details.OrderBy(h => h.FieldName).OrderBy(h => h.LineVersion)
}).FirstOrDefaultAsync();
答案 1 :(得分:0)
除了我看到的其他建议之外,我还使用了原始帖子评论中的链接,并且在那里也得到了不错的答案。我对其进行了测试,它的工作原理就像一种魅力。这就是我最终得到的:
public async Task<PermitHeader> GetPermit(int HeaderId)
{
var header = await _context.Headers
.Include(location => location.Location)
.Where(p => p.HeaderId == HeaderId).FirstOrDefaultAsync();
var details = await _context.Details
.OrderBy(ob => ob.FieldName)
.OrderBy(ob => ob.LineVersion)
.Where(d => d.HeaderHeaderId == HeaderId).ToListAsync();
header.Details = Details;
return header;
}
感谢您的快速回复!