繁体   English   中英

在EF6 C#中订购急切加载的导航属性数据

[英]Order Eager Loaded Navigation Property Data In EF6 C#

我正在努力找到适用于我在StackOverflow上遇到困难的情况的合适答案。 我正在尝试订购“渴望加载”的导航属性数据,但不确定如何正确编写Linq查询。

我的类型如下

这是父类型:

    public class Diary
{
    public Diary()
    {
        Appointments = new List<Appointment>();
    }
    public int Id{ get; set; }
    public DateTime DiaryDate { get; set; }
    public List<Appointment> Appointments { get; set; }

}

}

这是子类型:

public class Appointment
{
    public int Id { get; set; }
    public Office Office { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public string Comment { get; set; }

}

Office枚举是

public enum
{
Office1,
Office2,
Office3,
Office4
}

我尝试的存储库代码将返回带有链接约会的单个日记,如下所示。 我不想过滤所有数据,我只想能够按办公室编号排序导航属性,以便最终的输出在屏幕上看起来类似于此

日记-DiaryDate

办公室1 <-办公室1在这里约会->

办公室2

<-这里有2个办公室约会->

等等

仓库代码如下

        public Diary ReturnDiaryById(int id)
    {
        using(DiaryContext context = new DiaryContext())

      {
        var returnDiary = context.Diary.AsNoTracking().Include(a => a.Issues)
        .Select(b => new Diary
        {
            Appointments = (List<Appointment>)b.Appointments.OrderBy(c => c.Office),
            Id = b.Id,
            DiaryDate = b.DiaryDate
        }

            ).FirstOrDefault();


        return returnDiary;

        }
     }

该代码可以编译,但是在运行时它将编译不支持的异常。

我希望我已经解释了我要实现的目标,并且我的代码可以大致推断出这一点,如果没有,我可以澄清任何事情,

感谢您提供任何建议方面的帮助,我们将不胜感激所有输入

EF可能很难理解您的ENUM订单通过SQL查询的转换。

在您的情况下,在SQL端进行排序与​​在C#端进行排序之间没有太大的性能差异。(因为我们已经携带了所有约会的单个日记)

因此,请尝试执行以下查询,让我们知道是否可行:

public Diary ReturnDiaryById(int id)
{
 using(var context = new DiaryContext())
 {
  var returnDiary = context.Diary.AsNoTracking().Include(a => a.Appointments)
                           .FirstOrDefault(d => d.Id == id);

  if (returnDiary != null)
  {
   returnDiary.Appointments = returnDiary.Appointments.OrderBy(c => c.Office.ToString()).ToList();
  } 

  return returnDiary ;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM