2011-03-09 35 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);