Member 12665799 Ответов: 1

Необязательная динамическая группировка по многим с помощью linq


Привет,
Я столкнулся с проблемой динамической группировки.
У меня есть требование, когда кнопки перетаскиваются для группировки для создания отчета

Я попробовал использовать динамический linq- Я не хочу использовать магическую нить.

Поэтому я решил потратить больше времени и получить что-то без использования струн.

Я нашел C# 6.0 в двух словах-PredicateBuilder[^] и
другое расширение c# 3.0-Как я могу иерархически группировать данные с помощью LINQ? - переполнение стека[^]

Но GroupByMany в расширении имеет делегат как функцию, а не выражение.

Так что я не мог попробовать, как
<pre lang="c#"><pre lang="c#"><pre lang="text">


foreach (var entry in resultEntries)
           {
               if (projectGroup)
                   predicate1 = predicate.And(p => p.Project.Id == entry.Project.Id);

               if (clientGroup)
                   predicate2 = predicate.And(p => p.Client.Id == entry.Client.Id);

               if (userGroup)
                   predicate3 = predicate.And(p => p.User.Id == entry.User.Id);

               predicateResult.And(predicate1);
               predicateResult.And(predicate2);
               predicateResult.And(predicate3);

}
var output  = resultEntries.GroupByMany(predicate);


Экс:Жестко закодированный тип для одного сценария выглядит следующим образом
var nestedGrouping = reportTimeEntries
                               .GroupByMany(t => t.Project.Id, t => t.Client.Id);

Я хочу, чтобы это было динамично.Потому что я не знаю, в каком порядке фильтры отправляются для группировки.

Пожалуйста, помогите мне.Я застрял на последних трех неделях.

Что я уже пробовал:

публичное перечисление eEntry
{
NotSet = 0,
[Описание= " Клиенты"]
Клиенты = 1,
[Описание= " Проекты"]
Проекты = 2,
[Описание= " Пользователи"]
Пользователи=3
}


public void SubmitReport (EntryFilter filter) {//Фильтр содержит группы отчетов и диапазон дат
var reportGroups= "проекты, клиенты"; / / на самом деле должен исходить из фильтра.Но я показываю один сценарий
// Примечание: группы отчетов могут быть 1. Clientslients,
// 2.проекты,
// 3.Пользователи,
// 4.Клиенты, Проекты,
// 5. Проекты, Клиенты
// 6. Клиенты, Пользователи,
// 7. Пользователи, Клиенты,
// ..... прием. со всеми возможными комбинациями, включая опциональные

// Выше используются для группировки моих записей
Список<ввод&ГТ; записи=услуги.очищает основные атрибуты так же();

//Я хочу сгруппировать по идентификаторам группы отчетов
ВАР проект групп = reportGroups.Содержит(eEntry. Projects);
var clientGroup = группы отчетов.Содержит(eEntry.Клиенты);
var userGroup = группы отчетов.Содержит(eEntry.Пользователи);

если (проект групп)
записи.Метод groupBy(е=&ГТ;электронная.Проект.Идентификатор);

if (clientGroup)
записи.Метод groupBy(е=&ГТ;электронная.Клиент.Айди);

если (асэргрупп)
записи.Метод groupBy(е=&ГТ;электронная.Пользователей.Идентификатор);
// и все другие возможные комбинации

}

1 Ответов

Рейтинг:
2

Maciej Los

Пожалуйста, проверьте это: Linq GroupByMany динамически-блог Мицу[^]