You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用System.Linq.Dynamic.Core对复杂对象执行OrderBy排序报错如何解决

错误原因

System.Linq.Dynamic.Core.Exceptions.ParseException: 'No property or field 'Name' exists in type 'IEnumerable1'' 该报错是因为Students是IEnumerable集合类型,本身没有Name属性,只有集合内的单个Student对象才有Name属性,直接写Students.Name相当于尝试访问集合类型的Name`属性,触发异常。

解决方案

根据你的业务需求选择对应实现方式:

  • 场景1:按每个课程下第一个学生的姓名排序
    调用集合的First()方法获取单个Student对象后再访问Name属性即可:
using (var context = new SchoolContext())
{
    var list = context.Courses.Include("Students").AsQueryable();
    var result = list.OrderBy("Students.First().Name").ToList();
    // 注意原代码遍历的是未排序的list,这里改为遍历排序后的result
    foreach (var item in result)
    {
        Console.WriteLine("Hello World!" + item.Name );
    }
}

如果存在课程下没有学生的情况,可以改用FirstOrDefault()处理空值,写法如下:

var result = list.OrderBy("Students.FirstOrDefault() == null ? \"\" : Students.FirstOrDefault().Name").ToList();
  • 场景2:按课程下所有学生姓名的极值排序
    如果需要按课程下学生姓名最小/最大值排序,可使用Min()/Max()方法:
// 按学生姓名最小值排序
var result = list.OrderBy("Students.Min(Name)").ToList();
// 按学生姓名最大值排序
var result = list.OrderBy("Students.Max(Name)").ToList();
  • 场景3:查询所有学生并按学生姓名排序
    如果你的需求是获取学生列表,按学生姓名排序并关联课程信息,直接查询Students集合即可:
using (var context = new SchoolContext())
{
    var list = context.Students.Include("Course").AsQueryable();
    var result = list.OrderBy("Name").ToList();
    foreach (var item in result)
    {
        Console.WriteLine($"Hello World! 课程:{item.Course.Name} 学生:{item.Name}");
    }
}

内容的提问来源于stack exchange,提问作者Rahul.R.Parmar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:39:03