我有这个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 Guids我需要做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需要的那些问题之一......好吧,不是常数,而是类似的东西?在过去,我遇到了一些情况,我需要将一个变量从一个Dictionary转移到一个局部变量,以便LINQ工作。这是其中一个例子吗?或者有没有办法像我想的那样在一行中完成这一切。
答案 0 :(得分:3)
第二个代码执行两个独立的SQL查询,这就是它的工作原理。
要在ToArray
:
Contains
来电
po_data.POItemQuantiyReceived = NDCEntity.tbl_Ext_Mobile_Receipt_Item.Where(Function(p) po_data.POItems.Select(Function(r) r.UID).Contains(p.MobilePOItemUID)).ToArray()