我在供应商的C#中有一个列表,它们都具有Name属性。我想允许用户通过搜索名称来过滤该列表。过滤器字符串可以是部分匹配或完全匹配。但是,如果结果列表包含完全匹配,则它应该位于列表中位置为零的位置,然后是所有部分匹配。首先在列表中选择具有特定元素的列表的子集
我可以用linq和lambdas很容易地得到子列表,但我不得不求助于创建第二个列表,如果存在完全匹配,添加它,然后添加其余的匹配没有确切的一个。它感觉不雅。有更容易的方法吗?我当前的代码(从内存中完成,因此可能无法编译):
List<Vendor> temp = vendors.Where(v => v.Name.ToUpper().Contains(vendorNameSearch)).ToList();
Vendor exactMatch = vendors.Single(v => v.Name.ToUpper().Equals(vendorNameSearch));
if(null == exactMatch){return temp;}
else
{
List<Vendor> temp1 = new List<Vendor>();
temp1.Add(exactMatch);
temp1.AddRange(temp.Remove(exactMatch));
return temp1;
}