-2

データベースにKeywords1とkeywords2の2つの列を含むフロントエンドがあり、それらはキーワード(、で区切られています)と呼ばれる単一のフィールドに入力されます。これで、オートコンプリートテキストボックスとしてのキーワードを含む検索画面ができました。これを入力するには、DBから単一の値を取得する必要があるため、次のようになります。

Keywords
A
A
A,B
B,C
C,E
D,K

これらを単一のlistItemとして設定するには、次のようなものが必要です。

Keywords
A
B
C
D
k

そのため、フロントエンドには含まれず、複製されません。私はSQLの専門家ではありません。私が知っている方法のひとつは、DBからlike%entered keywords%を使用して個別の値を取得し、LINQを使用してそれらをコンマで区切ってから個別の値を取得することです。しかし、それは長い道のりです。

任意の提案をいただければ幸いです。

前もって感謝します。

4

2 に答える 2

1

少し遅れるかもしれませんが、別の答えは明確なキーワードで終わります:

List<string> yourKeywords= new List<string>(new string[] { "A,B,C", "C","B","B,C" });

var splitted = yourKeywords
    .SelectMany(item => item.Split(','))
    .Distinct();

ただし、これはDBに対して直接機能しません。SplitはSQLで同等ではないため、SelectManyを実行する前にDBの内容をメモリに読み込む必要があります。その場合、次のようになります

var splitted = db.Keywords
   .AsEnumerable()
   .SelectMany(item => item.Split(','))
   .Distinct();
于 2012-05-05T21:22:47.230 に答える
1

文字列分割とLinqgroupbyを使用してそれらを取得する

        List<string> yourKeywords= new List<string>(new string[] { "A,B,C", "C","B","B,C" });
        List<string> splitted = new List<string>();
        yourKeywords.ForEach(x => splitted.AddRange(x.Split(',')));
     var t =   splitted.GroupBy(x => x);
于 2012-05-05T19:50:27.280 に答える