2011-03-09 73 views
0

我想的ObjectQuery为选择的ObjectQuery lambda表达式内选择

SELECT * 
FROM tableA 
WHERE ID in (SELECT ID in tableB) 

创建这样使用lambda表达式查询我尝试使用

var histories = _entities.ProductViewHistories.Take(5).OrderByDescending(p=>p.DateViewed); 
var products = _entities.Products.Where(p => p.ID in histories); 

,但它不工作。 有人能指引我走向正确的方向吗?

谢谢

回答

1

当然 - “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);