所以我有一张这样的table:
现在我想清楚了 ShortCode
按订单 ID
下降。换句话说,不同的最后记录。这样地:
所以我尝试了群比,比如:
var data = db.ShortCodes.GroupBy(x => x.ShortCode).Select(x => x.FirstOrDefault()).OrderByDescending(s=> s.ID);
这给了我不同的记录,但不是最后的记录,也不是按id降序排列的:
我也试过了
var data = db.ShortCodeManager
.GroupBy(s => s. ShortCode)
.Select(g => g.First())
.OrderByDescending(s => s.ID);
这给了我一个错误 The method 'First' can only be used as a final query operation. Consider using the method 'FirstOrDefault' in this instance instead.
所以我改成 FirstOrDefault()
比如:
var data = db.ShortCodeManager
.GroupBy(s => s. ShortCode)
.Select(g => g.FirstOrDefault())
.OrderByDescending(s => s.ID);
这也给了我不同的记录,但不是最后的记录:
所以最后我试着像这里建议的那样:
var data = db.ShortCodeManager.Where(a => a.ID > 0).GroupBy(x => x.ShortCode).OrderByDescending(grp => grp.Max(g => g.ID)).Select(a => a.FirstOrDefault());
同样,这给了我不同的记录,但不是最后的记录,也不是按id降序排列的:
那么,如何编写查询以在linq中获得所需的结果呢?还要注意的是,我需要更多的不同的最后一个记录,而不是排序方式 ID
下降。如果有人也知道如何用原始sql编写它,那么它可能也很有用。
1条答案
按热度按时间lf5gs5x21#
此linq查询应适用于您的案例:
编辑:
根据你的评论,看起来你需要抛出匿名对象
result
至ShortCodeManagerModel
键入,然后将其传递给视图。所以,像这样的事情:然后通过
model
给你看。