在EF6 C#中订购Eager Loaded导航属性数据

时间:2016-02-15 20:40:06

标签: c# entity-framework linq entity-framework-6

我正在努力寻找一个适用于我在StackOverflow上苦苦挣扎的场景的合适答案。我正在尝试订购Eager Loaded导航属性数据,但我不确定如何正确编写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
}

我试图将我的存储库代码返回到具有链接约会的单个日记,如下所示。我不想过滤所有数据,我只是希望能够通过办公室数量来订购导航属性,这样我的最终输出看起来与屏幕上的内容类似

Diary - DiaryDate

办公室1 &lt; - 办公室1约会 - &gt;

Office 2

&lt; - 办公室2约会 - &gt;

存储库代码如下

        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;

        }
     }

此代码编译但在运行时编译不受支持的异常。

我希望我已经解释了我想要实现的目标,并且我的代码大致推断出它,如果不是我可以澄清任何内容,

感谢您提供任何建议方面的帮助,非常感谢所有投入

1 个答案:

答案 0 :(得分:0)

可能EF很难理解你的ENUM orderby到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 ;
}
相关问题