我正在尝试使用IQueryProvider.Execute命令,并传递一个表达式,该表达式是我的表达式树项目的一部分。这个命令会返回一个对象,该对象可以是OrderedEnumerable或GroupedEnumerable,具体取决于原始表达式。GroupBy表达式创建GroupedEnumerable对象。下面的代码也创建了一个GroupedEnumerable对象,这将向您展示我遇到的问题的示例。
List<int> numbers = new List<int> { 1, 7, 16, 23, 41, 66 };
object grouped = numbers.GroupBy(n => n % 2 == 0);
当“grouped”是一个GroupedEnumerable对象时,我无法将其转换为任何其他类型,以便允许我调用“GetEnumerator”。我也无法将其转换为任何可以让我使用“foreach”命令的东西。如果我改变代码使用“var”(如下所示),则grouped现在是OrderedEnumerable类型。我可以获取枚举器并在foreach命令中使用它。
List<int> numbers = new List<int> { 1, 7, 16, 23, 41, 66 };
var grouped = numbers.GroupBy(n => n % 2 == 0);
回到我的表达式树项目,IQueryProvider.Execute命令返回一个对象,但当对象是GroupedEnumerable时,我需要能够将对象转换为OrderedEnumerable。 我尝试过的所有转换都显示类似“无法将类型为'System.Linq.GroupedEnumerable`3'的对象强制转换为类型.....”的错误。 有人能告诉我如何将对象转换为更有用的东西吗?
IEnumerable<IGrouping<bool, int>>
,而不是一个GroupedEnumerable
对象。 - Adam Robinson