表达式树在4.5中的解析不同于3.5

时间:2013-06-07 14:36:44

标签: c# asp.net delegates lambda

我最近将.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))}

任何人都可以向我解释发生了什么事吗? AndAlso的工作方式与&amp;&amp;?

不同

0 个答案:

没有答案