我有一個這樣的物件:
public class MyObject
{
public List<string> Names { get; set; }
// other props
}
我有一個這樣的過濾串列:
var freeText = "comm";
var list = new List<MyObject>(); // Initialized
var searchResult = list.Where(o =>
o.Names.Any(n => n.ToLower().StartsWith(freeText.ToLower())) ||
o.Names.Any(n => n.ToLower().Contains(freeText.ToLower())));
它作業正常,但是,我想要做的是讓搜索結果按開頭排序,然后按包含排序。
前任:
Obj 1 {Names : [ "free communication" ,"some name"]},
Obj 2 { Names : ["communcation Center", "whatever"]}
我希望結果是 [Obj2, Obj1]。
我試圖 orderBy freeText 的索引,但它似乎不適用于字串陣列/串列。我試圖在This question 提出解決方案,因此它適用于陣列而不是字串,但它不起作用。知道怎么做嗎?
uj5u.com熱心網友回復:
您可以實作一個簡單的評分機制,您將在其中捕獲兩個標志(startsWith和contains)并將這些標志用于過濾和排序:
var result = list.Select(item => new
{
item,
startsWith = item.Names.Any(n => n.ToLower().StartsWith(freeText.ToLower())),
contains = item.Names.Any(n => n.ToLower().Contains(freeText.ToLower())),
})
.Where(item => item.startsWith || item.contains)
.OrderByDescending(item => item.startsWith)
.ThenByDescending(item => item.contains)
.Select(x => x.item);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/529478.html
標籤:C#。网林克排序仿制药
