订购包含实体

时间:2019-03-24 12:23:41

标签: entity-framework entity-framework-core

我正在使用v2.2.3实体框架。我正在尝试通过使用以下代码来订购一个子实体,但这没有用。

var result= _databaseContext.Movie.AsNoTracking().Include(p => p.Cast.OrderByDescending(c => c.Birthday)).ToList();

错误:

  

包含属性lambda表达式'p => {来自[c]中p.Casts命令的Cast c。生日desc select [c]}'无效。该表达式应表示属性访问:“ t => t.MyProperty”。要定位在派生类型上声明的导航,请指定目标类型的显式键入的lambda参数,例如'(派生d)=> d.MyProperty'。有关包含相关数据的更多信息,请参见http://go.microsoft.com/fwlink/?LinkID=746393

实体:

public class Movie
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public List<Cast> Casts { get; set; }
    }

  public class Cast
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime Birthday { get; set; }
    }

你有什么主意吗?

1 个答案:

答案 0 :(得分:2)

就像我们看到的herehere一样,无法对渴望加载(.Include查询)的子集合进行排序。

您必须先加载Movies,然后对它们的Casts-collection进行排序。试试这个:

var result= _databaseContext.Movie.AsNoTracking().Include(p => p.Casts).ToList();

results.ForEach(x => x.Casts = x.Casts.OrderBy(y => y.BirthDay).ToList());