【发布时间】:2022-01-16 19:46:52
【问题描述】:
我使用的是 EF Core 2.2.6 版。
我想使用IQueryable根据内部列表对列表进行降序排序。
我有一个课程列表,每个课程都有一个课程进度列表,我想根据内部列表课程进度'UpdatedDate订购课程列表。
我在对数据库执行之前以编程方式构建 LINQ 查询。
代码如下
IQueryable<Course> query = _dbContext
.Courses
.AsNoTracking()
.Include(x => x.CourseProgresses)
if (page > 0 && pageSize > 0)
query = query.Skip((page - 1) * pageSize)
.Take(pageSize);
if (watched == false)
{
query = query.OrderByDescending(x => x.LastUpdatedAt);
}
else
{
// TODO: THIS IS THE PART I NEED TO FIX
query = query.OrderByDescending(x => x.CourseProgresses.OrderByDescending(y => y.UpdateDate));
}
var courses = await query.ToListAsync();
当执行带有查询的行时
query = query.OrderByDescending(x => x.CourseProgresses.OrderByDescending(y => y.UpdateDate));
在尝试制作ToListAsync 之后,我收到如下错误:
比较数组中的两个元素失败。
至少一个对象必须实现 IComparable。
我看到另一篇文章解释了如何使用.Sort 进行操作,但问题是我需要使用List,而不是IQueryable,有人有解决此问题的方法吗?
【问题讨论】:
-
它没有,在你提到的问题中只显示一个元素,我需要一个元素列表(在我的情况下是当然)作为返回值
-
不,当我添加您提到的代码时,我仍然没有收到异常: query = query.Include(x => x.CourseProgresses.OrderByDescending(y => y.UpdateDate)) ;
-
异常:包含属性 lambda 表达式 'x => {from CourseProgress y in x.CourseProgresses orderby [y].UpdateDate desc select [y]}' 无效。该表达式应表示属性访问:'t => t.MyProperty'。要定位在派生类型上声明的导航,请指定目标类型的显式类型 lambda 参数,例如'(Derived d) => d.MyProperty'.
-
能否在问题中包含使用过的 EF 版本?
-
这不是一个正确的问题.. 我们不知道
Courses和CourseProgresses之间的关系是什么
标签: c# .net entity-framework linq