1

私は2つのリストを持っています:

public class KeywordAdCategory
{
    [Key]
    [Column("Ad_Id", Order = 1)]
    public int Ad_Id { get; set; }

    [Key]
    [Column("Category_Id", Order = 2)]
    public int Category_Id { get; set; }

    [Key]
    [Column("Keyword_Id", Order = 0)]
    public int Keyword_Id { get; set; }
}


public IList<int> KeywordIds { get; set;}

値:

KeywordIds = { 3510, 5686 }

KeywordAdCategory = 

     5291 | 1 | 3510
     5308 | 5 | 3510
     5310 | 5 | 3510
     5312 | 5 | 3510
     5308 | 5 | 5686

KeywordAdCategory から Keyword_ID 3510 と 5686 に一致する Ad_Id のみを抽出する必要があるため、5308 のみを取得する必要があります。

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

var matchingKac = from kac in keywordAdCategoryQuery
                  where keywordIds.Distinct().Contains(kac.Keyword_Id)
                  select kac.Ad_Id;

しかし、KeywordAdCategory からすべてのレコードを返しています。

何かアイデアはありますか?

ありがとう。

4

1 に答える 1

1

これは、KeywordAdCategory オブジェクトを匿名型にグループ化することで実現できました。

var grouped = kacList.GroupBy(x => x.Ad_Id,
                              y => y.Keyword_Id,
                              (id, keywords) => new
                              { 
                                  Ad_ID = id, 
                                  Keywords = keywords.ToList()
                              });

次に、一意の Ad_ID をそれぞれチェックして、keywordIds配列内のすべてのキーワードと一致するかどうかを確認します。

var resultsList = grouped.Where(x => keywordIds.All(y => x.Keywords.Contains(y)))
                         .ToList();
于 2013-11-08T19:44:46.563 に答える