2017-08-29 63 views
1

enter image description here實體框架從另一個E.F選擇查詢

我試圖用WHERE語句從E.F查詢得到ItemsEntity獲得ID列表中進行選擇。該條件從另一個返回多於1個item_id的E.F查詢中獲取item_id。

var item_id = (from n in db.OrderDetail where n.OrderId == id select n.item_id); 
var itemEntity = (from m in db.ItemsEntity where *m.item_id==item_id* select m); 
+0

OrderDetail是否與ItemsEntity相關?如果是這樣,這是一個非常簡單的單個查詢使用導航屬性。 –

回答

3

您可以使用Contains方法時要使用一個集合在Where條款

var listOfIds = (from n in db.OrderDetail where n.OrderId == id select n.item_id); 
var itemEntity = (from m in db.ItemsEntity where listOfIds.Contains(m.item_id) select m); 

記住的是,與上面的代碼,itemEntity變量將是集合。如果您想要單個項目,請根據需要使用像FirstOrDefault()First()這樣的方法。

上面的代碼可以被寫成一個LINQ方法鏈如下面以及

var listOfIds = db.OrderDetail.Where(n=>n.OrderId == id).Select(x=>x.item_id); 
var itemEntity = db.ItemsEntity.Where(m=>listOfIds.Contains(m.item_id)); 
+0

我需要所有找到的item_id分別用於獲取項目,儘管item_ids的數量爲 –

+0

謝謝。有用。 –

0

使用首先()或FirstOrDefault()在第一個語句的末尾使ITEM_ID變量的實際的int類型,而不是IQueriable,因爲它是現在。