Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在EF6 C中订购已加载的导航属性数据#_C#_Entity Framework_Linq_Entity Framework 6 - Fatal编程技术网

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

C# 在EF6 C中订购已加载的导航属性数据#,c#,entity-framework,linq,entity-framework-6,C#,Entity Framework,Linq,Entity Framework 6,我正在努力寻找一个适用于我在StackOverflow上遇到的情况的合适答案。我试图订购已加载的导航属性数据,但我不确定如何正确编写Linq查询 我的类型如下: 这是父类型: public class Diary { public Diary() { Appointments = new List<Appointment>(); } public int Id{ get; set; } public DateTime D

我正在努力寻找一个适用于我在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 enum
{
Office1,
Office2,
Office3,
Office4
}
我的存储库代码,我试图返回一个带有链接约会的个人日记,如下所示。我不想过滤所有的数据,我只想能够按office num排序navigation属性,这样我的最终输出将与屏幕上的类似

日记日期

办公室1

办公室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;

        }
     }
public Diary ReturnDiaryById(int-id)
{
使用(DiaryContext=new DiaryContext())
{
var returnDiary=context.Diary.AsNoTracking().Include(a=>a.Issues)
.选择(b=>新建日记)
{
约会=(列表)b.约会.订购人(c=>c.办公室),
Id=b.Id,
日记日期=b.日记日期
}
).FirstOrDefault();
返回日志;
}
}
此代码可编译,但在运行时编译不支持的异常

我希望我已经解释了我试图实现的目标,并且我的代码粗略地推断了它,如果没有,我可以澄清任何事情


感谢您在建议方面提供的帮助,非常感谢您的所有输入

可能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 ;
}

谢谢你,我假设枚举与整数有效相关,它可以自己排序,但是很清楚!这是一个很好的假设,除了LINQ和SQL之外,你用C#写的东西需要无阻抗地翻译成SQL,EF系统才能理解翻译。。e、 g.枚举、包含检查、LINQ查询中的C#函数调用都是EF或任何LINQ2SQL提供程序都不知道如何转换为SQL代码的构造。这就是脱节的原因。C#Enum在SQL中没有自然等价物。有一些聪明的方法可以将它映射到一个表(Id对应于int-enum值)并根据类似enum的列进行排序,但在您的情况下,您不需要它
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 ;
}