フィールドにすべての要素が含まれているテーブルからすべてを選択し、list<String>
単語に関係なく文字列全体の他のフィールドを検索する Linq ステートメントが必要です。
これは基本的に、すべての単語がレコードに含まれている必要があるフィールドでの包括的な単語検索と、他のフィールドでの文字列検索です。
つまり、ユーザーが検索文字列全体の AccountID または Detail を検索したり、単語を含む単語の clientID を検索したりできるルックアップ画面があります。ClientId コンポーネントを理解できる場合は、これを詳細フィールドに展開します。
複雑なのは、AccountId と Detail も検索されていることです。基本的に、「or」が原因で、2 番目の例で foreach を実行できなくなります。
例 1、後で query.Count() を実行すると、次のエラーが発生します。
クエリ.カウント(); 'query.Count()' がタイプ 'System.NotSupportedException' int {System.NotSupportedException} の例外をスローしました
+base {"ローカル シーケンスは、Contains 演算子を除くクエリ演算子の LINQ to SQL 実装では使用できません。"} System.SystemException {System.NotSupportedException}
var StrList = searchStr.Split(' ').ToList();
query = query.Where(p => p.AccountID.Contains(searchStr) || StrList.All(x => p.clientID.Contains(x)) || p.Detail.Contains(searchStr));
例 2、これにより、任意の検索語タイプの結果が得られます。
var StrList = searchStr.Split(' ').ToList();
foreach (var item in StrList)
query = query.Where(p => p.AccountID.Contains(searchStr) || p.clientID.Contains(item) || p.Detail.Contains(searchStr));
アップデート
AccountID、ClientId、Details の 3 つのフィールドを持つテーブルがあります。
レコード ID、AccountID、CLientId、詳細
1、「123223」、「bobo and co」、「このクライアントはサックス」
2、「654355」、「ジェシーの髪」、「このクライアントなどが好き」
3、「456455」、「Microsoft」、「Mircosoft が大好き」
検索例
searchStr = "232" レコード 1 を返します。
searchStr = "bobo hair" レコードを返しません
searchStr = "bobo and" レコード 1 を返します
searchStr = "123 bobo and" 戻り値 何も返さない
ここでのアイデアは次のとおりです。
- クライアントが部分的な AccountId を入力すると、何かが返されます。
- クライアントが ClientId を検索したい場合は、クライアントを入力して、検索用語 (単語リストなど) でキャンセルできます。クライアントの数が多いため、ClientID にはすべての単語を (任意の順序で) 含める必要があります。
奇妙に思えるかもしれませんが、強力な方法でアカウントを見つけるための単純なインターフェイスにすぎません。