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();
答案 0 :(得分:1)
我无法使用VS 2012和.Net 4.5重现这一点,但解决方法可能是绕过扩展方法的语法糖,并直接在静态类中使用Select
方法。定义:
EnumerableRowCollectionExtensions.Select(dtbl.AsEnumerable(), d => d)
答案 1 :(得分:0)
解决:这是一种干扰扩展方法;我定义了一个&#34; pass-though&#34;扩展(Select,OrderBy等)允许其他源文件中的函数避免使用System.Linq&#34;,以及允许通过引用快速找到所有Linq调用。
原来有一些扩展方法的未记录(并且显然无法访问)版本,如EnumerableRowCollection.Select&lt;&gt;(),它们被传递隐藏,并且在扩展类中定义,到目前为止我可以&# 39;找不到。
无论如何,我可以通过找到扩展类或者通过传递来从这里到达那里。