ユーザー データベースを検索し、一致の精度に応じて結果を並べ替えたいと考えています。たとえば、ユーザー名の完全一致は、単一の単語が一致する前に結果に表示される必要があります。
これは私が持っているものです(変数「値」には検索語が含まれ、「クエリ」には変更したい最初のクエリ可能なものが含まれます)
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 までの結果を結合し、渡すことができる新しいクエリを作成したいと考えています。また、クエリの順序を保持したいのですが、率直に言って、これを行う方法がわかりません..