2

フィールドにすべての要素が含まれているテーブルからすべてを選択し、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 にはすべての単語を (任意の順序で) 含める必要があります。

奇妙に思えるかもしれませんが、強力な方法でアカウントを見つけるための単純なインターフェイスにすぎません。

4

1 に答える 1

1

あなたの問題には2つの解決策があると思います。

1 つは、次のようにメモリ内の結果をカウントすることです。

int count = query.ToList().Count();

もう 1 つは、クエリで使用しないことです。All

var query2 = query;
foreach (var item in StrList)
{
    query2 = query2.Where(p => p.clientID.Contains(item));
}
var result = query2.Union(query.Where(p => p.AccountID.Contains(searchStr) || p.Detail.Contains(searchStr)));

Union最後の は 2 つのクエリの間のように機能しますOR

于 2012-08-30T00:17:23.820 に答える