0

配列内のすべての単語に一致する行を返すには、linq を使用してクエリを作成する必要があります。

配列の例 (splitKeywords):

{string[2]}
    [0]: "RENAULT"
    [1]: "CLIO"

キーワード検索テーブル:

public class KeywordSearch
{
    // Primary properties
    public int Id { get; set; }
    public string Name { get; set; }
    public Keyword Keyword { get; set; }
}

このテーブルには次のレコードがあります。

Id: 1
Name: "RENAULT"
Keyword_Id: 3503

Id: 2
Name: "CLIO"
Keyword_Id: 3503

Keyword_Id配列内のすべての単語に一致するすべての s を取得したい。

これまでのところ、私は持っています:

編集:

var keywordSearchQuery = _keywordSearchRepository.Query;

var keywordIds = from k in keywordSearchQuery
                        where splitKeywords.All(word => word.Equals((k.Name)))
                        select k.Keyword.Id;

しかし、それは機能していません。何か案は?

ありがとう

4

2 に答える 2

3

最初に、同じ Keyword.Id を持つすべてのレコードを 1 つのレコードに結合する必要があります。GroupBy でそれを行います。
それらをグループ化したら、すべてのアイテム (個々のレコード、名前) が少なくとも 1 つの splitKeyWords と一致しないグループ (KeywordIds) を除外できます。

Original - すべての Name 値が splitKeyWords の値と一致することを確認します

var results = keywordSearchQuery
                .GroupBy(k => k.Keyword_Id)
                .Where(g => g.All(k => splitKeyWords.Any(w => w.Equals(k.Name))))
                .Select(g => g.Key);

更新- これにより、splitKeyWords のすべての値が名前と一致することが確認されます。

var results = keywordSearchQuery
                .GroupBy(k => k.Keyword_Id)
                .Where(g => splitKeyWords.All(w => g.Any(k => w.Equals(k.Name))))
                .Select(g => g.Key);

RENAULT、CLIO、および ASDF という名前の Keyword.Id がある場合、一致することに注意してください。

于 2013-07-16T14:47:04.167 に答える