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 Guids の生成に問題があったことを意味します。しかし、それを 2 つのステートメントに分割すると、次のようになります。

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 が必要とする問題の 1 つでしょうか。定数ではなく、似たようなものですか? 過去に、LINQ が機能するために変数をディクショナリから単なるローカル変数に移動する必要がある状況に遭遇したことがあります。これはそれらのインスタンスの 1 つですか? または、私が望むようにこれをすべて1行で行う方法はありますか?

4

1 に答える 1

3

2 番目のコードは、2 つの別個の 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 に答える