【发布时间】: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<Post> postlist = context.Where(x => x.DateApproved != null).ToList();会得到所有帖子的列表,其中 DateApproved 不为空,如果设置了 Post 应该有它的标志... -
你的 Flag 类也看起来很奇怪。它有一个单独的
PostID和Post对象。如果您有 Post,PostID 是否无关紧要?旗帜真的需要知道它在哪个帖子上吗?邮政知道它有什么标志还不够吗? -
嗨,克里斯。是的,我认为您是正确的,不需要 Flag 上的 Post 对象,我只是在稍后才这样做,因为我越来越绝望。我将快速测试每个人的答案并编辑问题以解决该问题。感谢您的反馈!
-
请注意您的第二条评论,我只希望返回链接到标志的帖子,即使没有链接的标志,您的答案也只会返回
标签: c# asp.net-mvc linq entity-framework virtual