ObjectQuery лямбда-выражение для выбора внутри выбора
Я хочу создать такой запрос, используя лямбда-выражение в ObjectQuery
SELECT *
FROM tableA
WHERE ID in (SELECT ID in tableB)
Я пытаюсь использовать
var histories = _entities.ProductViewHistories.Take(5).OrderByDescending(p=>p.DateViewed);
var products = _entities.Products.Where(p => p.ID in histories );
но это не работает Может ли кто-нибудь указать мне правильное направление?
Спасибо
1 ответ
Решение
Конечно, "в" не является частью C# в этом смысле. Попробуйте это, хотя:
var products = _entities.Products.Where(p => histories.Contains(p.ID));
Contains
является подходящим методом для определения того, находится ли значение в другой коллекции. Тем не менее, вы можете найти, что было бы более целесообразно использовать соединение здесь.
Кроме того, я обеспокоен этим запросом:
Это не представляет 5 последних просмотренных историй - оно представляет "несколько произвольных 5 просмотров" (первые 5 возвращаются в некотором неопределенном порядке), а затем располагаются в порядке "самый последний-первый".
Я подозреваю, что вы действительно хотите:
var histories = _entities.ProductViewHistories.OrderByDescending(p=>p.DateViewed)
.Take(5);