在Include中使用的Lambda表达式无效

时间:2019-11-27 03:15:44

标签: c# linq lambda sql-order-by

我的目标是订购一些返回的数据。我喜欢lambda表达式,但它们使我失望。下面的代码遇到了一个很奇妙的错误,那就是关于不将lambda放入include中。

us0

标题具有详细信息,详细信息需要按属性“ FieldName”排序,然后按属性“ LineVersion”排序。错误提示:

在Include中使用的Lambda表达式无效。

经过一番挖掘,我发现了几种避开lambda的方法,但是我对获得具有OrderBy的示例并没有任何运气,而我的大脑此刻正在使我失望,并且希望获得一点点踢,使这项工作。

顺便说一句:当没有OrderBy时,代码可以很好地工作,只是细节不一定总是按我需要的顺序返回。

预先感谢您的帮助 布拉德

2 个答案:

答案 0 :(得分:0)

我将使用SelectWhere之后但在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;
}

感谢您的快速回复!