-1

我正在尝试将网格数据复制到一个对象。

代码 :

object obj = GrdReport.ItemsSource;    
PrepareDataForStackedChart1(obj);

函数定义为

private void PrepareDataForStackedChart1(object categoies)           
{              
    var Salespersons = (from cat in categoies    
                    select cat.Salesperson);    
}

我收到错误:

无法从“lambda 表达式”转换为“System.Linq.Expressions.LambdaExpression”

谁能告诉我如何在 linq 查询中访问该对象?

4

1 回答 1

0

编辑:刚巧得知您正在使用第三方控件(来自您的重复问题),其ItemSource属性采用System.Object而不是IEnumerable。在这种情况下,要么将您的对象 ( ItemSource) 转换回原始类型,要么保留您用于在某处绑定控件并将该集合传递给您的PrepareDataForStackedChart1方法的原始集合。

一些猜测工作:

1)任一个

object obj = GrdReport.ItemsSource;    
PrepareDataForStackedChart1((IEnumerable<Category>)obj);

private void PrepareDataForStackedChart1(IEnumerable<Category> categories)           
{              
    var Salespersons = (from cat in categories    
                    select cat.Salesperson);    
}

2)或者当你这样做时

GrdReport.ItemsSource = GetCategories();

像这样复制备份:

categories = GetCategories(); //categories is defined in proper scope.
GrdReport.ItemsSource = categories;

后来你做;

PrepareDataForStackedChart1(categories);

private void PrepareDataForStackedChart1(IEnumerable<Category> categories)           
{              
    var Salespersons = (from cat in categories    
                    select cat.Salesperson);    
}

3)或者您可能会从您的 GridView 上定义的属性(可能)ItemsRows获取集合。祝你好运..


预编辑

该错误是因为您无法枚举普通对象。它必须是可枚举的。为什么要将对象值传递给您的PrepareDataForStackedChart1方法?相反,您不能通过IEnumerable自身吗?尝试

var categories = GrdReport.ItemsSource.OfType<Category>();    
PrepareDataForStackedChart1(categories);

private void PrepareDataForStackedChart1(IEnumerable<Category> categories)           
{              
    var Salespersons = (from cat in categories    
                        select cat.Salesperson);    
}

我假设你有父类Category

于 2012-11-12T09:28:58.997 回答