2010-07-20 2 views
10

Борьба немного сегодня.Если утверждения в Linq, где статья

У меня есть следующий метод, который возвращает список продуктов ....

public static List<tblWeight> GetProductInfo(string memberid, string locationid, string basematerial, string source) 
     { 
      MyEntities getproductinfo = new MyEntities(); 

      return (from p in getproductinfo .tblWeights 
         where p.MemberId == memberid && 
           p.LocationId == locationid && 
           p.BaseMaterialName == basematerial && 
           p.WeightStatus == source 
         select p) 
         .ToList(); 
  • Где Основные части & источником являются выпадающие списки.

Как мне включить включение нескольких операторов IF в предложение where?

Например, если базовый материал ddl не тронут, но выбран элемент в исходном ddl, результат будет возвращать все, что связано с базовым материалом, но фильтруется выбранным источником.

Это даже имеет смысл ?!

Я даже не уверен, что принимаю правильный подход - пожалуйста, простите мое невежество.

+1

Можете ли вы уточнить «если базовый материал ddl не тронут, а выбран элемент в источнике ddl»? – bits

+0

DDL означает, что в этом контексте? –

+0

Извините бит. Поэтому, если пользователь ничего не выбирает из выпадающего списка базового материала, то по существу этот набор данных не будет «фильтроваться» по этим критериям. –

ответ

16

вы можете добавить их к вашему запросу на необходимость:

var r = (from p in getproductinfo .tblWeights 
         where p.MemberId == memberid && 
           p.LocationId == locationid && 
           p.WeightStatus == source 
         select p) 

if (!String.IsNullOrEmpty(basematrial)) 
    r = r.Where(p => p.BaseMaterialName == basematerial); 

return r.ToList(); 
+0

Hello Moi - большое спасибо за это решение, оно очень помогло мне и было просто реализовать. –

10

Рассмотрим реализацию этих методов расширения с именем WhereIf.

Вы передаете ему два параметра: оператор, вычисленный для булевых и лямбда-функций. Если оператор bool оценивает значение true, добавляется лямбда.

WhereIf on ExtensionMethod.net

Ваш запрос может выглядеть следующим образом:

return getproductinfo.tblWeights 
      .Where(w=> w.MemberId == memberid && 
        w.LocationId == locationid) 
      .WhereIf(!string.IsNullOrEmpty(basematerial), w=>w.BaseMaterialName == basematerial) 
      .WhereIf(!string.IsNullOrEmpty(source), w=>w.WeightStatus == source)       
      .ToList(); 

Вот они, как для IEnumerable и IQueryable. Это позволяет использовать .WhereIf() в LINQ To SQL, Entity Framework, Lists, Arrays и все, что реализует эти 2 интерфейса.

+0

Эй, p..campbell - спасибо за ваш вклад, он дал мне много пищи для размышлений. Тем не менее, я реализовал решение moi, отметив это как ответ. Тем не менее, я уверен, что в какой-то момент я воспользуюсь вашим решением, чтобы как можно больше ответить на вопрос. –

+2

Для IQueryable мне пришлось добавить .AsQueryable() в return: 'return source.Where (предикат) .AsQueryable();' –

Смежные вопросы