c# - 无法从 LINQ 语句调用另一个方法
问题描述
我有 ac# 语句,它遍历一组行。其中一个字段调用私有方法来获取对象数组,但我得到空值。我在 linq 中放置了一个断点,但它从未命中该方法。
这是我的代码
IQueryable<MyObject> myObject = ds.Tables['Table'].AsEnumerable().Select(row => new MyObject
{
id = row.Field<int>("ID"),
MyCollectionArray = this.getCollectionArray(row.Field<string>("MyAggregatedString")),
}).AsQueryable();
private MyObect[] getCollectionArray(string concatString)
{
// placed a breakpoint, it is never called. Not sure why
}
感谢您的帮助。
解决方案
您面临的称为Deferred Execution。
这意味着在您在某处使用它之前不会执行您的查询。
这是文档的一部分:
延迟执行意味着表达式的计算被延迟到实际需要它的实现值。当您必须操作大型数据集合时,延迟执行可以极大地提高性能,尤其是在包含一系列链接查询或操作的程序中。在最好的情况下,延迟执行只允许通过源集合进行一次迭代。
为了执行你的语句,你只需要使用它。最简单的方法可能是调用
myObject.ToList()
如果您使用需要填充值的函数(如 Sum、Average 等),也会执行它
推荐阅读
- github - 尝试使用 CircleCI 推送到同一存储库时出现“致命:无法分叉”
- c# - 我怎样才能使 ac# 方法更通用?
- r - R CRAN 包安装失败
- git - 这4个git.exe在Windows OS下的具体区别是什么?
- javascript - 从数组中删除元素时未定义索引
- ios - 使用不同版本的 Xcode 创建的分支在 git 中真的不同吗?
- android - 从十六进制到 UUID 格式的隐蔽 BLE 服务分配编号
- sql - 如何使用 sqlite3 构造我的查询以获得一致的结果?
- amazon-web-services - 如何处理红移负载中的换行符?
- r - 为时间序列条形图中的日期添加更新菜单