我有两个清单:
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的所有记录。
任何想法?
感谢。
答案 0 :(得分: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();