как сделать заказ в Multiple Collection - PullRequest
0 голосов
/ 04 ноября 2019
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))));

Я делаю Order by для списка из космоса 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": []
}

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Пожалуйста, проверьте этот код, он работает

     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();
0 голосов
/ 04 ноября 2019

Есть много проблем с вашим кодом, эта строка компилируется вообще?

test = test .OrderBy(p => p.Test1.Test2.Select(m => m.Test3.Select(x => x.name)));

p.Test1

Я предполагаю, что это опечатка, глядя наваш класс должен быть test1 (не имя класса с большой буквы).

Если вышеупомянутое было опечаткой, и это действительно p.test1 в вашем реальном коде, то опять-таки проверка вашего класса test1 - этоПеречисление нельзя сказать

test1.test2

Я думаю, что все это не скомпилируется. Теперь, возвращаясь к исходному вопросу, вы можете отсортировать test3 по его имени, а затем назначить отсортированный список для объектов Test2 членом test3, но это довольно странно, если вы говорите, что хотите отсортировать test по свойству name test3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...