0

我有这个 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.

我认为它在生成我需要执行 Cntains 的数组 og Guid 时遇到了一些麻烦。但是当我把它分成两个陈述时:

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 工作的情况。这是其中之一吗?或者有没有办法像我想要的那样在一条线上完成这一切。

4

1 回答 1

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()
于 2013-10-09T21:27:57.340 回答