c# - 自动完成订单

标签 c# linq autocomplete

假设我们有一组人类:

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/

相关文章:

c# - 通过用户输入将项目添加到列表

c# - BASS.net C# : What does spectogram image represent that outputted by CreateSpectrum3DVoicePrint Method?

c# - ajax 可以加载哪些所见即所得的编辑器?

c# - 如何从 Deployment.Current.Dispatcher.BeginInvoke 获取结果?

javascript - JQuery 冲突不起作用

jquery - 如何禁用 textboxlist 添加不在自动完成列表中的标签

c# - 连接两个 List<T>,其中每个列表中的字段值相等

c# - 在文本文件中搜索直到特定字符串

c# - 带有 .any() 的 LINQ 语句未返回。永远加载

javascript - Jquery自动完成数据显示标签和商店ID