【发布时间】:2018-03-30 16:19:29
【问题描述】:
我想先显示没有显示辅助 ID 的结果,然后显示有辅助 ID 的项目。但后来我需要Skip 和Take。
IQueryable<thing> result;
IQueryable<thing> result2;
result2 = result
.Where(t => !(t.second_id == null || t.second_id.Trim() == string.Empty))
.OrderBy(t => t.second_id);
result = result
.Where(t => (t.second_id== null || t.second_id.Trim() == string.Empty))
.OrderBy(t => t.first_id);
result = result.Concat(result2);
return result
.Select(t => t.primary_key)
.Skip(pageSize * pageNumber)
.Take(pageSize)
.ToList();
问题是在Concat 之后,IQueryable 在技术上不再是有序的,所以Skip 和Take 会抛出一个错误。像这样:
PagedList error: The method 'OrderBy' must be called before the method 'Skip'
【问题讨论】:
-
你有什么问题?为什么不能在最后一个
Select()之后简单地添加一个或多个OrderBy()调用? -
另外,
(t.second_id == null || t.second_id.Trim() == string.Empty)可能只是string.IsNullOrWhiteSpace(t.second_id) -
@CamiloTerevinto 我认为这不适用于实体框架
-
@SamIam 它可以翻译
IsNullOrWhiteSpace,就像它可以翻译Trim... -
@CamiloTerevinto Samlam 是对的。它不起作用。我试过了。
标签: c# entity-framework linq