我正在努力寻找一个适用于我在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;
}
}
此代码编译但在运行时编译不受支持的异常。
我希望我已经解释了我想要实现的目标,并且我的代码大致推断出它,如果不是我可以澄清任何内容,
感谢您提供任何建议方面的帮助,非常感谢所有投入
答案 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 ;
}