2013-10-09 39 views
0

我有了這個LINQ表達式爲什麼我的linq表達式只在分成兩部分時才起作用?

po_data.POItemQuantiyReceived = NDCEntity.tbl_Ext_Mobile_Receipt_Item.Where(Function(p) po_data.POItems.Select(Function(r) r.UID).ToArray().Contains(p.MobilePOItemUID)).ToArray() 

當我運行它,我得到這個錯誤:

LINQ to Entities does not recognize the method 'System.Guid[] ToArray[Guid](System.Collections.Generic.IEnumerable`1[System.Guid])' method, and this method cannot be translated into a store expression. 

我採取意味着它遇到了一些麻煩產生陣列OG的GUID我需要做Cntains。但是當我把它分成兩個報表:

Dim test As Guid() = po_data.POItems.Select(Function(r) r.UID).ToArray() 
po_data.POItemQuantiyReceived = NDCEntity.tbl_Ext_Mobile_Receipt_Item.Where(Function(p) test.Contains(p.MobilePOItemUID)) 

它工作正常。這是Linq需要的那些問題之一..嗯,不是一個常數,而是類似的東西?在過去,我遇到了一些情況,我需要將一個變量從一個字典變成一個局部變量,以便LINQ工作。這是這種情況之一嗎?或者有沒有辦法像我想要的那樣在一行中完成這一切。

+0

的原因是,在它發送到數據庫中的表達式必須轉換爲SQL查詢。該錯誤告訴你,如何將ToArray方法轉換爲SQL並不怎麼樣。分割時,第一行的ToArray方法不會發送到數據庫,只有Select方法內的部分是。這種情況下的ToArray發生在客戶端上。 –

回答

3

第二個代碼執行兩個分離的SQL查詢,這就是它工作的原因。

爲了使Contains之前的第一個工作日刪除ToArray電話:

po_data.POItemQuantiyReceived = NDCEntity.tbl_Ext_Mobile_Receipt_Item.Where(Function(p) po_data.POItems.Select(Function(r) r.UID).Contains(p.MobilePOItemUID)).ToArray() 
+0

不幸的是,這並沒有解決它。我收到錯誤「無法創建類型爲」MobileSAPWebServices.tbl_Ext_Mobile_PO_Item「的常量值。此上下文中僅支持基本類型或枚舉類型。「tbl_Ext_Mobile_PO_Item」是po_data.POItems中項目的類型 – cost

相關問題