[英]LINQ - Order By and Distinct by different fields. Skip & Take distinct values
我想ORDER BY
一些字段,但SELECT DISTINCT
另一场,之后应用Skip & Take
代码:
var result = entities.OrderBy(e => e.OrderField)
.Select(e => e.SelectField)
.Distinct()
.Skip(skip)
.Take(take)
.ToArray();
但我得到这个例外:
System.NotSupportedException: ''Skip' 方法仅支持 LINQ to Entities 中的排序输入。 方法 'OrderBy' 必须在方法 'Skip' 之前调用。
我理解原因(该集合在排序和跳过之间发生了变化)但是我可以在不多次查询数据库的情况下解决这个问题吗(编辑:并且不获取比预期更多的实体)?
编辑:我认为没有最佳解决方案,所以我所做的是获取值然后对它们进行分页。 *叹*
var result = entities.OrderBy(e => e.OrderField)
.Select(e => e.SelectField)
.Distinct()
.ToArray()
.Skip(skip)
.Take(take)
.ToArray();
您应该在Skip
之前添加.OrderBy(e => e)
。
var result = entities.OrderBy(e => e.OrderField)
.Select(e => e.SelectField)
.Distinct()
.OrderBy(e => e)
.Skip(skip)
.Take(take)
.ToArray();
阅读以下帖子以更好地理解
编辑:根据评论更新。 以下代码应该适用于您的情况:
var result = entities
.OrderBy(e => e.OrderField)
.Select(e => e.SelectField)
.GroupBy(e => e)
.Select(group => group.Key)
.Skip(skip)
.Take(take)
.ToArray();
您可以从数据库中获取Distinct
值,然后像这样在内存中工作:
var result = entities.OrderBy(e => e.OrderField)
.Select(e => e.SelectField)
.Distinct()
.ToArray()
.Skip(skip)
.Take(take)
.ToArray();
您将根据需要查询一次
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.