1

最近、.NET 3.5 Web アプリを .NET 4.5 にアップグレードしました。アプリの一部で、キャッシュ内のデータをクエリし、フィルターを追加する (述語に追加する) 述語を作成します。同じ WHERE を異なるデータで複数回追加することがあります (itemCode = 123 AND itemCode = 456)。3.5 ではこれが機能し、4.5 では機能しません (実際にはどちらでも機能しないように思われます。何が変わったのか疑問に思っています)。述語を調べると (それを構築するコードは 4.5 への変換で変更されませんでした)、ここに違いがあります。

{f => ((((True && Invoke(e => ((Convert(e.IsItem) != null) && (e.IsItem = value(AvailableItems+<>c__DisplayClass26).nei)),f)) && Invoke(e => ((e.VendorNumber != null) && (e.VendorNumber = value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)),f)) && Invoke(e => ((e.VendorNumber != null) && (e.VendorNumber = value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)),f)) && Invoke(e => ((e.VendorNumber != null) && (e.VendorNumber = value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)),f))}


{f => ((((True AndAlso Invoke(e => ((Convert(e.IsItem) != null) AndAlso (e.IsItem == value(AvailableItems+<>c__DisplayClass24).nei)), f)) AndAlso Invoke(e => ((e.VendorNumber != null) AndAlso (e.VendorNumber == value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)), f)) AndAlso Invoke(e => ((e.VendorNumber != null) AndAlso (e.VendorNumber == value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)), f)) AndAlso Invoke(e => ((e.VendorNumber != null) AndAlso (e.VendorNumber == value(AvailableItems+<>c__DisplayClass0).filter.ColumnValue)), f))}

誰が私に何が起こっているのか説明できますか? AndAls は && とは異なる動作をしますか?

4

0 に答える 0