【发布时间】:2014-02-22 22:16:45
【问题描述】:
下面的代码在排序方面有什么问题?排序代码被命中,但排序永远不会应用于结果。
var results = new List<Location>();
var county = context.boc_County.Where(x => x.Description.Contains(phrase.ToLower())).ToList();
results.AddRange(_mapper.MapCountyFromDb(county));
var town = context.boc_Town.Where(x => x.Description.Contains(phrase.ToLower())).ToList();
results.AddRange(_mapper.MapTownFromDb(town));
if (orderBy == "Identifier")
{
if (direction == "ASC")
results = results.OrderBy(x => x.Identifier);
else
results = results.OrderByDescending(x => x.Identifier);
}
if (orderBy == "Type")
{
if (direction == "ASC")
results = results.OrderBy(x => x.LocationType.ToString());
else
results = results.OrderByDescending(x => x.LocationType.ToString());
}
if (orderBy == "Description")
{
if (direction == "ASC")
results = results.OrderBy(x => x.Description);
else
results = results.OrderByDescending(x => x.Description);
}
var model = new LocationSearchResult()
{
Locations = query.Skip(page * pageSize).Take(pageSize),
TotalCount = query.Count()
};
return model;
【问题讨论】:
-
你为什么在这里使用
Queryable?你有一个内存集合(你正在使用ToList)那么为什么不把它保留为IEnumerable<T>呢?使用AsQueryable会使事情变得更加复杂。此外,我们不知道各种变量值是什么……如果您能给我们一个简短但完整的示例来说明问题,那就更好了。 -
我看不出有什么问题。通过删除东西来简化你的代码。你会发现它最终会起作用。罪魁祸首是你刚刚删除的内容。
-
简单解释:
orderBy永远不会匹配你测试它的字符串。您可以使用调试器轻松找到此类错误。 -
我使用 Queryable 是因为我可以分配我的 orderby 查询。我正在更新代码以不使用导致更多嵌套 if 的可查询。 Usr 你错了,我的 orderby 被击中了。
-
我更新了代码,如您所见,导致代码更多。结果是一样的,Ordering 永远不会发生。
标签: linq sorting iqueryable