Linq to Sql - используйте сумму в предложении where - PullRequest
0 голосов
/ 26 мая 2009

Я пытаюсь выбрать заказы, в которых заказано более или менее 2000 товаров, в зависимости от других значений. Мне нужно выбрать информацию из таблицы Orders, но проверить это значение в таблице OrdersProducts, в частности, сумму OrdersProducts.ProductQty. Мне также нужно сделать это с помощью построителя предикатов из-за других требований. Пока у меня есть это, но это не возвращает результаты правильно. Он использует вложенные лямбда-выражения, чего я не знал, что смог сделать, но я попробовал, и он работает, но он не возвращает правильных результатов.

Dim getOrders = From d In db.Orders _
                Where d.Status = OrderStatus.Approved _
                Select d

' Then a for loop adding parameters via Predicatebuilder... 


If over2000 = True Then
    ' over 2000
    predicate1 = predicate1.And(Function(d) (d.OrderProducts.Sum(Function(c) c.ProductQty > 2000)))

Else
    ' under 2000
    predicate1 = predicate1.And(Function(d) (d.OrderProducts.Sum(Function(c) c.ProductQty < 2000)))

End If

basePredicate = basePredicate.Or(predicate1)


' End For loop

getOrders = getOrders.Where(basePredicate)

Я удалил некоторый код для краткости, но я думаю, что это понятно. Как я могу это сделать?? Спасибо!

1 Ответ

4 голосов
/ 26 мая 2009

Попробуйте изменить это:

(d.OrderProducts.Sum(Function(c) c.ProductQty > 2000))

к этому:

(d.OrderProducts.Sum(Function(c) c.ProductQty) > 2000)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...