私は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キーワードがすべての行で最大時間を見つけ、次に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();
別のアプリでロジックを試しましたが、機能していません。ロジックによると、最初に3行にGEOキーワードがあり、次の2行にJCBがあり、次に比類のない残りがあります。urコードで変更する必要があるもの。助けてください。ありがとう