在C#EF 5 Code First中用于多对多关系的Lambda表达式

Nas*_*ash 1 linq lambda ef-code-first c#-4.0

我正在使用EF 5 Code First和VS 2012.我有文章和标签的课程.每篇文章至少有一个标签相关联.请参阅以下课程.

public class Article
{
    public int ArticleId { get; set; }
    public virtual ICollection<ArticleTag> Tags { get; set; }
}
public class Tag
{
    public int TagId { get; set; }
    public string TagName { get; set; }
}

public class ArticleTag
{
    public int ArticleId { get; set; }
    public int TagId { get; set; }

    // navigation property
    public virtual Article Article { get; set; }
    public virtual Tag Tag { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以下是我试过的代码.requestTags包含TadgIds列表.repBase是db上下文.但是下面的代码正在撤回所有文章.

var idList = requestTags.tags.Select(t => t.id).ToList();
 var result= repBase.GetAll<Article>().Select(tg => tg.Tags.Where(tk => idList.Contains(tk.TagId))).ToList();
Run Code Online (Sandbox Code Playgroud)

请让我获取给定TagIds列表的文章列表.

提前致谢.

Adu*_*cci 5

我想你正在寻找这个.

更改:

  • SelectWhere
  • tg.Tags.Containstg.Tags.Any

例:

var idList = requestTags.tags.Select(t => t.id).ToList();

var result= repBase.GetAll<Article>().Where(tg => tg.Tags.Any(tk => idList.Contains(tk.TagId))).ToList();
Run Code Online (Sandbox Code Playgroud)