假设我们有一组人类
:
public class Human
{
public string FirstName { get; set; }
public string SecondName { get; set; }
public string CompanyName { get; set; }
}
var people = new List<Human>(){...};
我们如何在首先按 FirstName
然后按 SecondName
然后按 CompanyName
对人员进行排序时实现自动完成?
我试过:
people.Where(x => x.FirstName.StartsWith(term) || x.SecondName.StartsWith(term)
|| x.CompanyName.StartsWith(term))
.OrderBy(x => x.FirstName).ThenBy(x => x.SecondName).ThenBy(x => x.CompanyName)
但这并不能正常工作。我只想首先查看所有匹配的 FirstName
字段,然后只查看 SecondName
字段,依此类推。
最佳答案
people.Where(x => x.FirstName.StartsWith(term)).OrderBy(x => x.FirstName)
.Concat(people.Where(x => x.SecondName.StartsWith(term)).OrderBy(x => x.SecondName))
.Concat(people.Where(x => x.CompanyName.StartsWith(term)).OrderBy(x => x.CompanyName))
是否将 .Distinct()
添加到末尾取决于您是否要排除一个人以多种方式匹配的情况(在这种情况下您也可以使用 . Union()
而不是 .Concat()
取决于您的来源 - 它被记录为保留可枚举来源的顺序,但不是其他可查询的来源,因此它可能会弄乱顺序取决于人
的来源)。
关于c# - 自动完成订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12108154/