Как я могу переписать это с помощью условия в LINQ?
Если selectID = ноль, я хочу, чтобы это выполнялось:
var products = from p in product.Table
orderby p.Name
where (p.stock == stockId)
select p;
Если selectID NOT zero, я хочу, чтобы это выполнялось:
var products = from p in product.Table
orderby p.Name
where (p.stock == stockId) &&
(p.Id == selectID)
select p;
Это ниже, но я должен использовать "фиктивное" второе условие (p.hidden == false) для работы троичного оператора:
var products = from p in product.Table
orderby p.Name
where (p.stock == stockId) &&
(selectID != 0 ? p.Id == selectID : p.hidden == false)
select p;
Есть ли способ избавиться от (p.hidden == false), потому что это не требуется в логике и именно там, чтобы заставить оператора работать. благодаря
Вы можете использовать тот же идентификатор, что и запись, как резервное значение:
var products = from p in product.Table
orderby p.Name
where p.stock == stockId &&
p.Id == (selectID == 0 ? p.Id : selectID)
select p;
Однако, поскольку это может привести к менее эффективному планированию запросов, я бы просто использовал if-else
:
var products = product.Table.Where(p => p.stock == stockId);
if(selectID != 0)
products = products.Where(p => p.Id == selectID);
products = products.OrderBy(p=> p.Name);
Вы также можете написать так:
var products = from p in product.Table
orderby p.Name
where (p.stock == stockId) &&
(p.Id == selectID || selectID == 0)
select p;
|| selectID == 0
|| selectID == 0
просто возвращает true, если идентификатор не указан и по-прежнему разрешает выполнение запроса по вашему желанию. Ниже приведена ссылка на то, как я узнал этот простой трюк.