我一直在努力掙扎,並試圖讓我的思維圍繞這些概念。任何幫助將不勝感激。給定一個表中的Orders集合,迭代它的最好方法是什麼,並對其他表執行查詢。如何在不使用foreach的情況下從集合中查詢實體
這個循環做我想要的,但我已經被告知並顯示這是如何導致性能問題。在其他帖子上,我已經閱讀了最好在循環之外查詢dbase的位置。
foreach (var item in myOrders)
{
var lookUpValues=(from f in ORDERS
where f.ORDERS ==item.ORDER_ID
&& f.ORDERS_SUFFIX==item.LINE
select f.Something);
}
而不是下拉到遍歷我已經試過這樣的事情,但是當你看到它不會返回準確的行之前的整個訂單表。
var orderIds=myOrders.Select (x =>x.ORDER_ID).Distinct().ToList();
var lineIds=myOrders.Select (x =>x.LINE).Distinct().ToList();
var query=(from f in ORDERS
where orderIds.Contains(f.ORDERS)
&& lineIds.Contains(f.ORDERS_SUFFIX)
select f).ToList();
下面會做我認爲需要的。它會返回迭代所需的正確訂單。但是,它會拋出一個錯誤,我相信這是因爲你無法一起查詢內存對象和實體。
var ordersAndLine=(from f in myOrders select new{sId=f.ORDER_ID,line=f.LINE}).ToList();
var query=(from f in ORDERS
from s in ordersAndLine
where s.sId==f.ORDERS
&& s.line==f.ORDERS_SUFFIX
select f).ToList();
NotSupportedException:無法創建類型爲「匿名類型」的常量值。在此上下文中僅支持基本類型(如Int32,String和Guid)。
我真的希望我的問題有道理。如果我沒有正確解釋我的情況,我會提前道歉。我一直在做的是將表的大部分內存拉到內存中迭代,但我擔心這會導致性能問題,並希望看看是否有更好的方法來過濾結果查詢。
myOrders和ORDERS從哪裏來。它們是來自數據上下文的屬性嗎?他們是你已經拉回來的藏品嗎?我猜ORDERS是數據上下文的一個屬性,myOrders是前一個查詢的結果,但不容易分辨。此外,如果myOrders(或訂單)是查詢的結果,它仍然是IQueryable,還是您稱爲ToArray或ToList? – Devin
嗨德文。訂單是一個表,myOrders是一個用戶定義的訂單子集,存在於臨時表中。 – Mustang31