powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как прописать в LINQ-запросе условие where когда само условие инвариантно?
4 сообщений из 4, страница 1 из 1
Как прописать в LINQ-запросе условие where когда само условие инвариантно?
    #37581143
Фотография OracleLover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет
Код: c#
1.
2.
3.
4.
5.
TestModel filter
...
var list = from item in Data.GetItems()
             where item.Item_ID == filter.ITEM_ID && item.Item_REF_IF == filter.ITEM_REF_IF
             select item



Как вы поняли задан фильтр нескольких полей, т.е поле может быть не задано(null), тогда в условии where его быть не должно, либо задано, тогда в условии оно должно быть. Как это написать одним запрос, и возможно ли?
...
Рейтинг: 0 / 0
Как прописать в LINQ-запросе условие where когда само условие инвариантно?
    #37581190
Фотография OracleLover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если подумать то приходит на ум только
Код: c#
1.
2.
3.
var list = from item in Data.GetItems()
             where item.Item_ID == (filter.ITEM_ID == null ? item.Item_ID : filter.ITEM_ID) && item.Item_REF_IF == (filter.Item_REF_IF == null ? item.Item_REF_IF : filter.Item_REF_IF) 
             select item
...
Рейтинг: 0 / 0
Как прописать в LINQ-запросе условие where когда само условие инвариантно?
    #37581230
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
var q = Data.GetItems();

if (filter.ITEM_ID.HasValue)
    q = from item in q where item.Item_ID == filter.ITEM_ID select item;

if (filter.ITEM_REF_IF.HasValue)
    q = from item in q where item.Item_REF_IF == filter.ITEM_REF_IF select item;

return q.ToArray();
...
Рейтинг: 0 / 0
Как прописать в LINQ-запросе условие where когда само условие инвариантно?
    #37581233
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
(filter.ITEM_ID == null ? item.Item_ID : filter.ITEM_ID)


Поидее можно короче: filter.ITEM_ID ?? item.Item_ID. Или если ITEM_ID является Nullable то filter.ITEM_ID.GetValueOrDefault(item.ITEM_ID).

Еще можно так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
var list = from item in Data.GetItems()
                         select item;
if (filter.ITEM_ID != null)
{
   list = from item in list
           where item.ITEM_ID == filter.ITEM_ID
           select item;
}
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как прописать в LINQ-запросе условие where когда само условие инвариантно?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]