【问题标题】:Get (join) list where linked to optional List via Linq通过 Linq 获取(加入)链接到可选列表的列表
【发布时间】:2012-11-23 12:54:23
【问题描述】:

我通过 EF 创建了我的数据库,现在(使用 LINQ)我想返回一个列表(称为帖子),它链接到它的可选列表(称为标志)

在下面的例子中,你可以看到我给 table Post 一个虚拟的标志列表(这意味着可选对吗?)

型号:

public class Post
{
    public int PostID { get; set; }
    public string Title { get; set; }
    public DateTime? Dateapproved { get; set; }
    public virtual List<Flag> Flags { get; set; }
}

public class Flag
{
    public int FlagID { get; set; }
    public int PostID { get; set; }
}

EF:

public class sampleProject : DbContext
{
    public DbSet<Post> Posts { get; set; }
    public DbSet<Flag> Flags { get; set; }
}

我如何获得一个帖子列表,其中包含指向标志的链接,并且 Dateapproved 不为空?

这当然行不通,因为声明需要一个帖子,而是获取一个标志列表:

List<Post> postlist = context.Flags.Where(x => x.Post.DateApproved != null).ToList();

我知道“包含”功能,但不确定它是否可以在这里使用

这里的最佳做法是什么? 我应该以某种方式将其拆分为更多步骤吗?

【问题讨论】:

  • 虚拟并不意味着可选。它为空(或允许 Lfags 的零长度列表)是定义“可选”的好方法。虚拟与继承有关,并在此处记录:msdn.microsoft.com/en-us/library/9fkccyh4%28v=vs.80%29.aspx
  • 对于实际的问题,我原以为List&lt;Post&gt; postlist = context.Where(x =&gt; x.DateApproved != null).ToList(); 会得到所有帖子的列表,其中 DateApproved 不为空,如果设置了 Post 应该有它的标志...
  • 你的 Flag 类也看起来很奇怪。它有一个单独的PostIDPost 对象。如果您有 Post,PostID 是否无关紧要?旗帜真的需要知道它在哪个帖子上吗?邮政知道它有什么标志还不够吗?
  • 嗨,克里斯。是的,我认为您是正确的,不需要 Flag 上的 Post 对象,我只是在稍后才这样做,因为我越来越绝望。我将快速测试每个人的答案并编辑问题以解决该问题。感谢您的反馈!
  • 请注意您的第二条评论,我只希望返回链接到标志的帖子,即使没有链接的标志,您的答案也只会返回

标签: c# asp.net-mvc linq entity-framework virtual


【解决方案1】:

我如何获得包含标志链接的帖子列表,以及 Dateapproved 不为空?

试试这个:

var posts = db.Posts.Include("Flags").Where(x => x.Flags.Any() && x.Dateapproved != null).ToList();

【讨论】:

  • 非常感谢 testCoder,Any() 方法就像一个魅力!
【解决方案2】:

使用

  var result = from p in Posts
               join f in Flags on p.PostId equals f.PostId
               where f.Post.DateApproved != null
               select p;

【讨论】:

  • 嗨,Mihai,我相信这也可以,但 PostID 已经通过模型链接,所以感觉就像是再次链接它的额外步骤。但是感谢您花时间查看我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多