2016-01-18 2 views
1

Я использую EF6 с сервером MySQL. Я пытаюсь динамически добавлять предложения WHERE на основе переменной null или нет.
Это мой код:IQueryable не добавляет инструкцию WHERE в SQL

using (var dbContext = new Entities()) 
{ 
    IQueryable<Boxes> boxes = dbContext.Boxes; 

    if(this.Customer != null) 
     boxes.Where(box => box.CurrentCustomer == this.Customer);  

    if(this.IDs != null) 
     boxes.Where(box => this.IDs.Split(',').Any(id => id == box.ID.ToString())); 

    return new Response() { Success = true, Result = boxes.ToList() }; 
} 

Однако данные не фильтруются ИНЕК и все строки из таблицы возвращаются. Кроме того, в MySQL журнал я вижу заявление, которое не включает в себя условие WHERE:

1994 Query SELECT 
`Extent1`.`ID`, 
`Extent1`.`CurrentCustomer` 
FROM `Boxes` AS `Extent1` 

Am Я с помощью IQueryable неправильно?

+1

Вы уверены, что '' this.Customer' и this.Ids' не нуль? –

+2

В Linq '.Where' фактически возвращает результат. – Brandon

+0

Абсолютно. Пошаговое отладка – Kimmax

ответ

6

Вы должны сохранить запрос, если вы звоните Where метод:

IQueryable<Boxes> boxes = dbContext.Boxes; 

if(this.Customer != null) 
    boxes= boxes.Where(box => box.CurrentCustomer == this.Customer);  

if(this.IDs != null) 
    boxes=boxes.Where(box => this.IDs.Split(',').Any(id => id == box.ID.ToString())); 
//... 
+0

Ну .. это будет в моих лучших 10 вещах, которые я потратил впустую: D Спасибо! – Kimmax

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