【问题标题】:Lambda Expression for Many to Many realtionship in C# EF 5 Code FirstC# EF 5 Code First 中多对多关系的 Lambda 表达式
【发布时间】:2012-10-24 14:29:37
【问题描述】:

我使用的是 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; }
}

下面是我试过的代码。 requestTags 包含 TadgId 列表。 repBase 是数据库上下文。但下面的代码正在返回所有文章。

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();

请帮我获取给定 TagId 列表的文章列表。

提前致谢。

【问题讨论】:

  • 编辑我的旧问题的原因是,我不想找到更多的 DownVotes。打开新问题的原因是,我不确定是否有机会根据 Stackoverflow 协议重新打开已关闭的问题
  • 好吧,我的意思是,如果你有 5 次反对完全相同的问题,你应该问自己,“我可以改变什么,这样我就不会再得到 5 次反对”
  • 感谢关注。实际上,我最初的第一个问题很简单,只有两行。只是要求具有 3 个类名的多对多关系表达式(我为没有喝咖啡而付出了代价:))。我编辑的问题将提供我正在寻找的完整信息。
  • 对,我刚刚阅读了未经编辑的原始问题。对不起!

标签: linq c#-4.0 lambda ef-code-first


【解决方案1】:

我想你正在寻找这个。

变化:

  • 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();

【讨论】:

  • +2 - 这正是我正在寻找的。非常感谢 Aducci。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
相关资源
最近更新 更多