首页 > 解决方案 > 无法从 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
}

感谢您的帮助。

标签: c#linq

解决方案


您面临的称为Deferred Execution
这意味着在您在某处使用它之前不会执行您的查询。
这是文档的一部分:

延迟执行意味着表达式的计算被延迟到实际需要它的实现值。当您必须操作大型数据集合时,延迟执行可以极大地提高性能,尤其是在包含一系列链接查询或操作的程序中。在最好的情况下,延迟执行只允许通过源集合进行一次迭代。

为了执行你的语句,你只需要使用它。最简单的方法可能是调用

myObject.ToList()

如果您使用需要填充值的函数(如 Sum、Average 等),也会执行它


推荐阅读