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);
Другие вопросы по тегам