2013-01-31 4 views
0

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

Это работает:

var expression = from commission in db.Auftraege 
         where commission.Auftragsnummer == orderNbr 
         select new Commission() { EF_Commission = (commission as Auftrag) }; 

return expression.ToList(); 

Однако, если я преобразовать это использовать динамический, где пункт (потому что я хочу, чтобы применить некоторые дополнительные фильтры), не кажется, где-пункт будет применяться. Вместо этого, все комиссии будут возвращены, а не только тех, с определенным номером:

//base query 
var expression = from commission in db.Auftraege select new Commission() { EF_Commission = (commission as Auftrag) }; 

//now add a where clause if the input parameter was specified 
if (orderNbr >= 0) 
    expression.Where(commission => commission.EF_Commission.Auftragsnummer == orderNbr); 

return expression.ToList(); 

Я посмотрел на десяток примеров, но все они, кажется, сделать это таким образом. У кого-нибудь есть идея, почему второй запрос игнорирует предложение where?

ответ

1

Необходимо, чтобы назначить промежуточный expression чему-то (возможно, самому себе). expression.Where() не изменяет существующий запрос - он возвращает новый.

Итак:

expression = expression.Where(...); 
+0

О, что дешевая ошибка:/ Спасибо, теперь он работает отлично ... – Cleo

+0

@ user1870077 Оооо ... Я был там, много раз, я сам! –

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