Linq select内部select的ObjectQuery lambda表达式

Linq select内部select的ObjectQuery lambda表达式,linq,lambda,objectquery,Linq,Lambda,Objectquery,我想在ObjectQuery中使用lambda表达式创建如下查询 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 histo

我想在ObjectQuery中使用lambda表达式创建如下查询

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 );
但它不起作用。 有人能给我指一下正确的方向吗

谢谢

当然,“in”不是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);