1

Тема: Dynamic LINQ query

Всім привіт!

Є наступне завдання.
Треба динамічно (залежно від заданого цілого числа n) побудувати LINQ запит типу такого:

context.Load(list, l=>l.RootFolder.Folders.Include(f => f.Folders.Include(f2 => f2.Folders.Include(f3 => f3.Folders.Include(f4 => f4.Folders))))); //це було побудовано вручну, треба динамічно

Тобто вкладеність ось цих Include extension методів має бути n.

Можливо хтось пробував щось таке робити?


Буду вдячний за будь-яку відповідь.

Всім чудового дня, дякую

2

Re: Dynamic LINQ query

Дайте більше коду, щоб ми могли попробувати переписати це через цикли.
Розкажіть трохи про початкове завдання. Для чого вам вкладені Include ?, що таке context і list ?

3

Re: Dynamic LINQ query

Так, вибачте, не зовсім чітке формулювання задачі.

Глобально задача така:
- Через CSOM (Client SharePoint Object Model) треба з певного SharePoint list дістати структуру папок (саме об'єктами, а не стрічками) з певною глибиною вкладеності (тобто n - максимально допустима глибина вкладеності папок, які ми беремо).

Маю щось таке:

        static void Main(string[] args)
        {
            var creds = new NetworkCredential(username, password, domain);

            using (var context = new ClientContext(url))
            {

                context.Credentials = creds;

                var list = context.Web.Lists.GetByTitle("Data");
                context.Load(list, l => l.RootFolder.Folders.Include(
                        f => f.Folders.Include(f2 => f2.Folders.Include(
                        f3 => f3.Folders.Include(f4 => f4.Folders)))));
                context.ExecuteQuery();

                var folders = list.RootFolder.Folders; //по суті рекурсивно з певним лімітом вкладеності n можна перебрати в циклі або рекурсивно - це не проблема.
            }
        }
Подякували: leofun011

4

Re: Dynamic LINQ query

То певно треба використовувати

query.ViewAttributes = "Scope=\"Recursive\""; // <View Scope='Recursive'>

(1, 2, 3).

Подякували: #Sparta1

5

Re: Dynamic LINQ query

leofun01 написав:

То певно треба використовувати

query.ViewAttributes = "Scope=\"Recursive\"" // <View Scope='Recursive'>

(1, 2, 3).

Дякую!
Спробую через Caml.

Дам знати, як щось вийде.

6

Re: Dynamic LINQ query

Звітую.

Вдалося все чудово "зпарсити" через запропонований Вами підхід через Caml запит.

Використовував такий варіант побудови запиту:

<View Scope='Recursive'><RowLimit>5000</RowLimit></View>

Тобто "читав" пачками по 5к (ліміт).
По суті, отримав те, що й треба було і без LINQ.

Дуже дякую!

Подякували: leofun011