从相关实体获取记录

时间:2013-12-04 17:34:24

标签: c# asp.net-mvc linq

我有一个关键字ID列表:{1,2,3,4}

关键字实体:

public class Keyword
{
    public int Id { get; set; }

    public virtual ICollection<Ad> Ads { get; set; }
}

包含每组关键字的广告列表:

public class Ad
{
    public int Id { get; set; }

    public virtual ICollection<Keyword> Keywords { get; set; }
}

如何获得与所有关键字ID列表匹配的广告ID?

由于

2 个答案:

答案 0 :(得分:0)

如果keywords是您搜索的关键字ID数组,则allAds是要搜索的所有广告的列表:

var keywords = new[]{1,2,3,4};
List<Ad> allAds = new List<Ad>();

以下语句应找到包含所有必需关键字的所有广告:

var matchingAds = allAds.Where(ad => 
        keywords.All(keyword => 
            ad.Keywords.Any(x => x.Id == keyword)
        )
    );

答案 1 :(得分:0)

var keywords = new[]{1,2,3,4};

var query = Keywords.Where(kw => keywords.Any(n => n == kw.Id))
                    .SelectMany(m => m.Ads)
                    .Select(n => n.Id).ToList();