OrderBy IQueryable 列表基于 LINQ 中的另一个内部列表 [重复]
Posted
技术标签:
【中文标题】OrderBy IQueryable 列表基于 LINQ 中的另一个内部列表 [重复]【英文标题】:OrderBy IQueryable list based on another inner list in LINQ [duplicate] 【发布时间】: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
之间的关系是什么
【参考方案1】:
如果你想按嵌套元素排序,你可以这样做:
query = query.OrderByDescending(x =>
x.CourseProgresses = x.CourseProgresses.OrderByDescending(y => y.UpdateDate));
return x.Id;
【讨论】:
感谢您的回答,但它抱怨 x.CourseProgresses.OrderByDescending(y => y.UpdateDate)) 部分:无法从 IOrderedEnumerable以上是关于OrderBy IQueryable 列表基于 LINQ 中的另一个内部列表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
查找一个列表中具有与另一个对象列表中的属性匹配的属性的所有对象
我正在寻找一种从字符串构建 IQueryable 查询的方法