首页 > 解决方案 > 如何在多个集合中进行排序

问题描述

public class Test
{
    public int id{get;set;}
    public IEnumerable<Test1> test1{get;set;}
}

public class Test1
{
    public int id{get;set;}
    public IEnumerable<Test2> test2{get;set;}
}

public class Test2
{
    public int id{get;set;}
    public IEnumerable<Test3> test3{get;set;}
}

public class Test3
{
    public int id{get;set;}
    public string name{get;set;}
}

这就是我的模型的样子,我想使用名称列按此列表排序

IList<Test> test = ... ;

test = test .OrderBy(p => p.test1.select(o=>o.test2.Select(m => m.test3.Select(x => x.name))));

我正在为 cosmos db 中的列表进行排序

但它会引发一些错误,请有人帮我解决这个问题

{
 "message": "Message: {\"errors\":[{\"severity\":\"Error\",\"message\":\"Unsupported ORDER BY clause. ORDER BY item expression could not be mapped to a document path.\"}]}\r\nActivityId: 3761139f-cc41-49a5-874e-1b62efa8a8d5, Microsoft.Azure.Documents.Common/2.7.0, Windows/10.0.18362 documentdb-netcore-sdk/2.8.1",
  "version": 0,
  "errorCode": null,
  "result": null,
  "errors": []
}

标签: c#azure-cosmosdb

解决方案


请检查此代码,它的工作

     IList<Test> test = new List<Test>() { new Test() { id=1, test1=new List<Test1>() {
            new Test1(){ id=1, test2=new List<Test2> (){ new Test2() {  id=1, test3=new List<Test3> (){
                new Test3() { id=1,name="Hello"} ,
                new Test3() { id=2,name="welcome"} }
            } } } }
        } };

        test = test.OrderBy(p => p.test1.Select(m => m.test2.Select(x => x.test3.Select(a => a.name)))).ToList();

推荐阅读