2017-02-20 14 views
1

Следующий метод возвращает данные, когда leaId и seaId больше нуля.LINQ включает оператор «&&», если значение больше нуля

Как мне изменить запрос на возврат данных, если введен только leaId?

В связи с оператором && ничего не возвращается с seaId является необязательным и равным нулю.

public IQueryable<Stand> GetStand(int leaId, int seaId = 0) 
{ 
    return from c in db.Stands where c.LeaID == leaId && c.SeaID == seaId 
      select new Stand 
      { 
        //something 
      } 
} 
+1

'если (seaId == 0) возвращения из с в db.Stands где c.LEadID == leadId еще <текущий запрос>' –

ответ

5

Split ваш запрос на две части:

IQueryable<Stand> query=db.Stands.Where(c= c.LeaID == leaId); 

if(seaId>0) 
{ 
    query=query.Where(c= c.SeaID == seaId); 
} 
return query.Select(e=>...); 

Другая важная вещь, вы не должны проецировать свой запрос, используя тип объекта (Stand). В EF вы можете проецировать анонимный тип или использовать DTO. Если вы проецируете с помощью пользовательского класса, то проигнорируйте этот последний комментарий.

+0

На самом деле тип возврата «Стенд» - это особый класс. Меня беспокоит, что я должен выполнить два запроса. (Это касается конечной точки api, если это имеет значение) :) – OrElse

+1

@OrElse, вы не выполняете два запроса, вы строите запрос, который будет выполнен, когда вы материализуете результат, например, вызывая 'ToList' или iterating over it – octavioccl

0

Вы можете изменить свой метод как

public IQueryable<Stand> GetStand(int leaId, int seaId = 0) 
    { 
     return from c in db.Stands where (c.LeaID == leaId) ||(seaId>0 && c.SeaID == seaId) 
       select new Stand 
       { 
         //something 
       } 
    } 
+0

Здравствуйте, он работает как простой OR – OrElse

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

  • Нет связанных вопросов^_^