0
我想要搜索用戶數據庫並根據匹配的精確程度對結果進行排序。作爲一個例子,在單個詞匹配之前,應該在結果中出現用戶名的完全匹配。將多個查詢的結果合併爲單個查詢
這是我(變量「值」包含一個搜索詞,「查詢」包含初始可查詢我想修改)
var values = value.Split(new [] {' ','\t', '\n', '\r'});
var q1 = query.Where(u => u.Id == valueAsInt || u.ExternalId == valueAsInt);
var q2 = query.Where(u => u.Name.Contains(value) || u.Username.Contains(value));
var q3 = query.Where(u => values.All(i => u.Name.Contains(i)) || values.All(i => u.Username.Contains(i)));
var q4 = query.Where(u => values.Any(i => u.Name.Contains(i)) || values.Any(i => u.Username.Contains(i)));
不過,我現在想Q1的結果結合起來通過Q4,並有一個新的查詢,我可以傳遞。我也想保持自己的查詢的順序,並坦率地說,我不知道如何去這樣做..
您可以嘗試連接結果。我不確定訂單是否保留。 var qAll = q1.Concat(q1).Concat(q2).Concat(q3).Concat(q4); 會很有趣,看看它是否按預期工作。您可以爲每個查詢添加一個額外的排序列,以便儘可能訂購某些內容。 –
@SilasHansen謝謝,我會嘗試一下,看看它是如何工作的 – Toodleey
@SilasHansen似乎工作正常,將所有這些連接在一起,並對結果做出了明確的表述。由於事實證明查詢會在稍後重新排序,因此不確定該順序。 – Toodleey