C# 在列表列表中使用linq到orderBy

C# 在列表列表中使用linq到orderBy,c#,asp.net-mvc,linq,entity-framework-core,C#,Asp.net Mvc,Linq,Entity Framework Core,我有以下型号: public class Person { public int Id {get; set; } public string Name {get; set; } public List <Car> Cars {get; set; } } public class Car { public int Id {get; set; } public string Make {get; set; } public string

我有以下型号:

public class Person {
    public int Id {get; set; }
    public string Name {get; set; }
    public List <Car> Cars {get; set; }
}

public class Car {
    public int Id {get; set; }
    public string Make {get; set; }
    public string Color {get; set; }
}

var persons = new List<Person>(){.....}
人订购。姓名
可以正常工作,但我需要按
车订购。同时制作
。
因为我不能在
.Include(h=>h.Cars)中使用orderBy,
所以我决定使用foreach命令它

        entities.ForEach(h =>  {
            h.Cars.OrderBy(t => t.Make); 
        }); 
这不管用。如何使其工作?

关于OrderBy()

该方法返回项目集合,而不是就地订购,因此您需要将
Cars
设置为该特定值:

entities.ForEach(h => {
     // This will order your cars for this person by Make
     h.Cars = h.Cars.OrderBy(t => t.Make).ToList(); 
}); 
您还可以使用
Select()
语句在单个调用中处理此问题,以避免使用
ForEach()
调用再次遍历列表:

var entities = Persons.Include(h => h.Cars)
                      .Where(h => h.Id == 1)
                      .OrderBy(h => h.Name)
                      // .ToList() (Use this if calling directly from EF)
                      .Select(p => new Person(){
                          Id = p.Id,
                          Name = p.Name,
                          Cars = p.Cars.OrderBy(c => c.Name).ToList()
                      });
关于OrderBy()

该方法返回项目集合,而不是就地订购,因此您需要将
Cars
设置为该特定值:

entities.ForEach(h => {
     // This will order your cars for this person by Make
     h.Cars = h.Cars.OrderBy(t => t.Make).ToList(); 
}); 
您还可以使用
Select()
语句在单个调用中处理此问题,以避免使用
ForEach()
调用再次遍历列表:

var entities = Persons.Include(h => h.Cars)
                      .Where(h => h.Id == 1)
                      .OrderBy(h => h.Name)
                      // .ToList() (Use this if calling directly from EF)
                      .Select(p => new Person(){
                          Id = p.Id,
                          Name = p.Name,
                          Cars = p.Cars.OrderBy(c => c.Name).ToList()
                      });

我不确定我是否理解您的用例。所以,你是按人、按名字分类的,但你对按汽车分类的期望是什么?你的意思是,如果两个人的名字相同,那么他们应该按照他们“拥有”的汽车进行分类吗?如果你能澄清你的预期结果,我同意Luc Morin的观点。意图并不清楚。您是否希望按人名订购,然后按每个人的品牌订购汽车列表?或者您正在寻找一个交叉乘法结果,其中每个人/车组合都有一行,按人名和汽车品牌排序?我希望人员列表按人名排序,个人汽车列表按汽车排序。品牌我不确定我是否理解您的用例。所以,你是按人、按名字分类的,但你对按汽车分类的期望是什么?你的意思是,如果两个人的名字相同,那么他们应该按照他们“拥有”的汽车进行分类吗?如果你能澄清你的预期结果,我同意Luc Morin的观点。意图并不清楚。您是否希望按人名订购,然后按每个人的品牌订购汽车列表?或者,您正在寻找一个交叉乘法结果,其中每个人/车组合都有一行,按人名和汽车品牌排序?我希望人员列表按人名排序,个人汽车列表按汽车品牌排序。我不认为您可以在LINQ投影中使用
person
实体(如果
db.Persons
Person
类型的集合)它在原始帖子中不是非常清晰(因为
这个
看起来有点不对劲),但是如果它是直接从上下文调用的,那么在
Select()之前可能需要一个
ToList()
语句以使其按预期工作。这再次提醒了我为什么我要继续前进,转到
massive/petapoco/dapper
。唷!我认为你不能在LINQ投影中使用
Person
实体(如果
db.Persons
Person
类型的集合),在最初的帖子中它不是非常清晰(因为
this
似乎有点不对劲),但是如果直接从上下文调用它,那么在
Select()
语句之前可能需要一个
ToList()
,这样才能按预期工作。这再次提醒了我为什么要转到
massive/petapoco/dapper
。哇!