GroupBy с разными параметрами - PullRequest
1 голос
/ 21 апреля 2020

У меня один запрос с параметрами groupBy, зависит от ввода пользователя. Если условие истинно, запрос будет сгруппирован с атрибутом DOB. иначе это не нужно. Вот мой код

   var userList = user.GroupBy(x => new { x.Name, x.Age});
       if (isBaby)
       {
          userList = user.GroupBy(x => new { x.Name, x.Age, x.DOB });
       }

, но я получил ошибку, параметры которой не совпадают. Последний код предназначен для выбора из этого запроса следующим образом.

     var allList= userList.Select({ 
        ...
       }).ToList();

Я не хочу создавать два select списка, потому что им легче управлять, если использовать только один select список.

Отредактировано: это ошибка

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<SystemLinq.IGrouping<<anonymous type: string name, string age>, Domains.User>>' to 'System.Collections.Generic.IEnumerable<SystemLinq.IGrouping<<anonymous type: string name, string age, string DOB>, Domains.User>>'

введите код

Ответы [ 2 ]

3 голосов
/ 21 апреля 2020

Предполагая, что DOB является DateTime:

var userList = user.GroupBy(x => new { x.Name, x.Age, dob = isBaby ? x.DOB : DateTime.MinValue });

Таким образом, выражение всегда будет одного типа, но не вызовет дополнительный уровень группировки, когда isBaby ложно.

1 голос
/ 21 апреля 2020

Что ж, вы создаете два разных результата в группе с помощью ...

Var неявно пытается принять тип, и первое присваивание является анонным типом только с Name и Age. Второй добавляет DOB, который имеет другой тип anon.

Что-то вроде

new { x.Name, x.Age, DateOfBirth = isBaby ? x.DOB : DateTime.MinValue }

Исправит это

...