【问题标题】:Using multiple LINQ "Include" to get 2nd depth data使用多个 LINQ“包含”获取第二深度数据
【发布时间】:2013-04-13 10:21:01
【问题描述】:

我有以下模型(简化)

public partial class Fault
{
    public int FaultID { get; set; }
    ...
    public virtual ICollection<FaultComment> FaultComments { get; set; }
    public virtual User FaultCreatorUser { get; set; }
}

public partial class FaultComment
{
    public int CommentID { get; set; }
    public int FaultID { get; set; }
    public string CommentContent { get; set; }
    public Nullable<System.DateTime> CommentCreationDate { get; set; }
    public int CommentCreatorUserID { get; set; }
    public bool IsDeleted { get; set; }

    public virtual User User { get; set; }
    public virtual Fault Fault { get; set; }
}

所以有一个错误。它有一个导航属性来获取错误的 cmets 集合,每个推荐都有一个导航属性,用于创建评论的用户。

是否可以创建一个 LINQ 语句来检索其所有 cmets 的故障和评论的用户信息?

类似

var faultsWithComments = _context.Fault.Include("FaultComments").include("???FaultComments>>User???")

【问题讨论】:

    标签: asp.net-mvc entity-framework linq-to-entities


    【解决方案1】:
    var faultsWithComments = _context.Fault.Include("FaultComments.User");
    

    或者使用 EF >= 4.1,您可以使用强类型版本:

    var faultsWithComments = _context.Fault
        .Include(f => f.FaultComments.Select(fc => fc.User));
    

    (您需要在代码文件中使用using System.Data.Entity; 才能使用Include 扩展方法,该方法接受一个lambda 表达式作为参数。)

    EF 将包含指定导航路径上的所有相关实体,因此在包含FaultComments.User 时无需显式包含FaultComments

    【讨论】:

      【解决方案2】:

      Slauma 答案的功能性 VB.NET 版本:

      var faultsWithComments = _context.Fault.Include(
         function (f) f.FaultComments.Select(
            function (fc) fc.User
         )
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-01
        • 2010-11-30
        • 2021-11-02
        • 1970-01-01
        • 2022-12-18
        • 1970-01-01
        • 1970-01-01
        • 2020-12-30
        相关资源
        最近更新 更多