繁体   English   中英

为什么在IEnumerable上进行FirstOrDefault搜索 <Row> 基于RowIndex的在调试窗口中不起作用?

[英]Why the FirstOrDefault search on IEnumerable<Row> based on RowIndex doesn't work in debug windows?

下面的代码行(基于RowIndex在IEnumerable上执行FirstOrDefault搜索)在调试窗口(“监视”,“快速监视”和“即时”窗口)中不起作用。 它在这些窗口中引发System.NullReferenceException。 我正在使用Visual Studio 2015更新3。

sheetdata.Descendants<Row>().FirstOrDefault(p => p.RowIndex.Value == 2U)

但是,当我将其转换为list并执行相同的搜索时,它将在这些调试窗口中工作。 为什么会有这种差异?

sheetdata.Descendants<Row>().ToList().FirstOrDefault(p => p.RowIndex.Value == 2U)

当我运行代码时,这种差异并不存在。 我只有在尝试在这些调试窗口中调试代码时才能看到这种差异。

在此处输入图片说明

我认为OpenXml的QueryProvider在处理Convert.ToUInt32(2)遇到问题,因为他需要将其翻译成自己的语言(例如SQL的QueryProvider)。

您应该尝试避免在谓词中进行转换,并且提前进行转换,因为并非所有QueryProvider都支持所有功能,并且可能引发异常(主要是NotSupportedException )。

uint value = Convert.ToUInt32(2);
sheetdata.Descendants<Row>().FirstOrDefault(p => p.RowIndex.Value == value)

调用.ToList()将在内存中执行此操作,因为它将读取工作表中的所有值,然后找到第一个匹配的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM