выберите несколько идентификаторов из db C # - PullRequest
1 голос
/ 03 мая 2019

У меня есть база данных и файл Excel

И я хочу экспортировать строки в Excel

Как экспортировать строки с 1 идентификатором, который я знаю

Код, который вы видитениже

_Hours = Rep.Where(o => o.Projects.ProjectGroupID == 4).Where(o => o.Projects.ProjectType == 1).Sum(o => (decimal?)o.TaskEfforts) ?? 0m,

Но как я могу выбрать несколько идентификаторов?

Это не работает

 _Hours = Rep.Where(o => o.Projects.ProjectGroupID == 4).Where(o => o.ProjectDescriptionID == 10).Where(o => o.ProjectDescriptionID == 17).Where(o => o.ProjectDescriptionID == 18).Where(o => o.ProjectDescriptionID == 19).Where(o => o.ProjectDescriptionID == 21).Where(o => o.ProjectDescriptionID == 24).Where(o => o.ProjectDescriptionID == 26).Where(o => o.Projects.ProjectType == 1).Sum(o => (decimal?)o.TaskEfforts) ?? 0m,

Я знаю, что это ошибка, но как я могувыбрать удостоверение личности?

Спасибо за ответы.

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

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

Используйте список для логической логики вашего запроса LINQ.

List<int> ids = new List<int>{ 10, 17, 13, 7 };

_Hours = Rep.Where(o => ids.Contains(o.Projects.ProjectGroupID)).Where(o => o.Projects.ProjectType == 1).Sum(o => (decimal?)o.TaskEfforts) ?? default(int);

Управляя логическим значением таким образом, вы можете по существу преобразовать список целых в список объектов.

В качестве второго предложения where я вижу, что вам нужен другой атрибут, чтобы еще больше ограничить список. Это будет работать, так как каждое условие where действует по результатам первого, но для удобства читателя это должно быть &&.

_Hours = Rep.Where(o => ids.Contains(o.Projects.ProjectGroupID) && o.Projects.ProjectType == 1).ToList();
0 голосов
/ 03 мая 2019

Вы на правильном пути! Как уже упоминалось в комментариях, вы можете использовать || (ИЛИ) оператор для выбора объекта o, если идентификатор совпадает. В этом случае вам нужен только один Где. Вот ваш пример выписан:

_Hours = Rep.Where(o => o.Projects.ProjectGroupID == 4 || o.ProjectDescriptionID == 10 || o.ProjectDescriptionID == 17 || o.ProjectDescriptionID == 18 || o.ProjectDescriptionID == 19 || o.ProjectDescriptionID == 21 ||  o.ProjectDescriptionID == 24 || o.ProjectDescriptionID == 26).Where(o => o.Projects.ProjectType == 1).Sum(o => (decimal?)o.TaskEfforts) ?? 0m,

Редактировать: Не реализована проверка свойства ProjectType в конце OR. Сделано это самостоятельно ГДЕ селектор

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