Linq Where Clause Изменение на основе параметров - PullRequest
1 голос
/ 06 октября 2011

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

if(locid==0)
  {
   where (p.CustomerID == custid)
  }
 else{
   where (p.CustomerID == custid) & (p.LocationID == locid )
     }

Может ли кто-нибудь помочь мне, как я могу получить эту работу.

спасибо

Ответы [ 3 ]

3 голосов
/ 06 октября 2011

Да - запросы могут быть составлены (хотя в данном конкретном случае это не нужно, как указывало @rsbarro):

var query = p;

if(locid==0)
   query = query.Where( p =>p.CustomerID == custid);
else
   query = query.Where( p =>p.CustomerID == custid & p.LocationID == locid);

//any other conditions
3 голосов
/ 06 октября 2011

Вы можете попробовать написать это так:

where (p.CustomerID == custid) && (locid == 0 || p.LocationID == locid )
1 голос
/ 06 октября 2011

Как уже упоминалось BrokenGlass, вы должны использовать состав:

IQueryable<Foo> query = unfiltered.Where(p => p.CustomerID == custId);
if (locid != 0)
{
    query = query.Where(p => p.LocationID == locid);
}

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

Похоже, что в исходном сообщении вы пытались использовать синтаксис запроса по частям - это не сработает, но «точечная нотация» здесь довольно проста.Вы всегда можете создать свой первоначальный запрос, используя выражение запроса, если хотите - опять же, этот запрос не будет выполнен сразу же.

...