Linq to DataSet查询不返回预期的EnumerableRowCollection <datarow> </datarow>

时间:2014-12-18 20:04:04

标签: linq datatable dataview

dtbl不是强类型的DataTable,但所有这些都可以正常工作(因此命名空间和引用似乎没问题)

EnumerableRowCollection<DataRow> a = dtbl.AsEnumerable();
DataView                         b = dtbl.AsDataView();
IEnumerable<DataRow>             c = from y in dtbl.AsEnumerable() select y;

然而,这两个产量: “无法隐式将IEnumerable转换为EnumerableRowCollection”

EnumerableRowCollection<DataRow> d = from y in dtbl.AsEnumerable() select y;
EnumerableRowCollection<DataRow> e = dtbl.AsEnumerable().Select(y=>y);

错误有意义,但返回EnumerableRowCollection的查询显示在 MSDN示例http://msdn.microsoft.com/en-us/library/bb669080(v=vs.110).aspx以及此处 stackoverflow没有明显的打嗝

这是一个showstopper,所以我非常欢迎解决方案,因为我需要:

DataView view = (query performing filter and sort on dtbl).AsDataView();

2 个答案:

答案 0 :(得分:1)

我无法使用VS 2012和.Net 4.5重现这一点,但解决方法可能是绕过扩展方法的语法糖,并直接在静态类中使用Select方法。定义:

EnumerableRowCollectionExtensions.Select(dtbl.AsEnumerable(), d => d)

请参阅EnumerableRowCollectionExtensions Class

答案 1 :(得分:0)

解决:这是一种干扰扩展方法;我定义了一个&#34; pass-though&#34;扩展(Select,OrderBy等)允许其他源文件中的函数避免使用System.Linq&#34;,以及允许通过引用快速找到所有Linq调用。

原来有一些扩展方法的未记录(并且显然无法访问)版本,如EnumerableRowCollection.Select&lt;&gt;(),它们被传递隐藏,并且在扩展类中定义,到目前为止我可以&# 39;找不到。

无论如何,我可以通过找到扩展类或者通过传递来从这里到达那里。