我最近将.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;?
不同