我有一个List<Locations>
将被过滤以产生一组与搜索词相关的结果。
目前,我通过以下过滤尝试了这些“搜索结果”:
return locations.Where(o => o.Name.Contains(term)).Take(10).ToList();
问题
如果我输入“Chester”作为搜索词,我将永远不会看到“Chester”项目,尽管它存在于locations
列表中。原因是列表中有 10 个或更多其他项目的名称中包含字符串“Chester”(Manchester、Dorchester 等)。
我如何使用 LINQ 首先获取以搜索词开头的结果?
到目前为止我得到了什么
var startsWithList = list.Where(o => o.Name.StartsWith(term)).Take(10).ToList();
var containsList = list.Where(o => o.Name.StartsWith(term) && !startsWithList.Contains(o)).Take(10 - startsWithList.Count).ToList();
return startsWithList.AddRange(containsList);
我根本不喜欢上面的代码。我觉得这应该在一个中实现,Where
而不是执行两个 Where 和 Take 并结合两个列表。