我想承认我在 LINQ 方面很弱。我有数据列表。我想按给定值搜索列表拳头,然后按最大出现次数对数据进行排序,这意味着行中的最大时间。
List<SearchResult> list = new List<SearchResult>() {
new SearchResult(){ID=1,Title="Cat"},
new SearchResult(){ID=2,Title="dog"},
new SearchResult(){ID=3,Title="Tiger"},
new SearchResult(){ID=4,Title="Cat"},
new SearchResult(){ID=5,Title="cat"},
new SearchResult(){ID=6,Title="dog"},
};
如果我用“狗猫”之类的数据搜索和排序列表,那么输出将是
ID=1,Title=Cat
ID=4,Title=Cat
ID=5,Title=Cat
ID=2,Title=dog
ID=6,Title=dog
所有 cat 将首先出现,因为这个 cat 关键字在所有行中找到了最大时间,然后 dog 找到了最大时间。
以下数据不会出现,因为它不在搜索词中
ID=3,Title=Tiger
寻找解决方案。谢谢
更新部分代码
List<SearchResult> list = new List<SearchResult>() {
new SearchResult(){ID=1,Title="Geo Prism 1995 - ABS #16213899"},
new SearchResult(){ID=2,Title="Excavator JCB - ECU P/N: 728/35700"},
new SearchResult(){ID=3,Title="Geo Prism 1995 - ABS #16213899"},
new SearchResult(){ID=4,Title="JCB Excavator - ECU P/N: 728/35700"},
new SearchResult(){ID=5,Title="Geo Prism 1995 - ABS #16213899"},
new SearchResult(){ID=6,Title="dog"},
};
var to_search = new[] { "Geo", "JCB" };
var result = list.Where(sr => to_search.Any(ts => String.Compare(ts, sr.Title, StringComparison.OrdinalIgnoreCase) == 0))
.GroupBy(sr => sr.Title.ToLower())
.OrderByDescending(g => g.Count());
var matched = result.SelectMany(m => m);
var completeList = matched.Concat(list.Except(matched));
dataGridView2.DataSource = completeList.ToList();
我尝试在其他应用程序中使用您的逻辑,但它不起作用。根据逻辑,三行首先带有 GEO 关键字,然后接下来的 2 行带有 JCB,然后是无与伦比的其余部分。我需要在你的代码中改变什么。请帮忙。谢谢