【问题标题】:Linq to DataSet query isn't returning expected EnumerableRowCollection<DataRow>Linq to DataSet 查询未返回预期的 EnumerableRowCollection<DataRow>
【发布时间】:2014-12-18 20:04:03
【问题描述】:

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

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

这是一个很好的解决方案,因此非常欢迎提供解决方案,因为我需要:

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

【问题讨论】:

  • 这个EnumerableRowCollection&lt;DataRow&gt; d = from y in dtbl.AsEnumerable() select y;EnumerableRowCollection&lt;DataRow&gt; d2 = dtbl.AsEnumerable(); 工作正常。不太确定你是如何得到异常的,尝试干净重建,重新启动 Visual Studio
  • 谢谢@Habib,已经尝试过重建、重启和关机-回收。你能做到这意味着我必须在这里有当地的东西。我正在运行 VS13 更新 3 并构建 .net 4.5。
  • Select() 上的智能感知是什么意思?

标签: linq datatable dataview


【解决方案1】:

我无法使用 VS 2012 和 .Net 4.5 重现此问题,但解决方法可能是绕过扩展方法的语法糖,并直接从定义它的静态类中使用 Select 方法:

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

EnumerableRowCollectionExtensions Class

【讨论】:

  • 谢谢!我将 EnumerableRowCollectionExtensions 版本添加到传递中并且它有效。非常感谢!! (以及我从这里的 UPVOTE,因为我还没有真正做到这一点的声誉)
【解决方案2】:

已解决:这是一种干扰扩展方法;我定义了一个“传递”扩展(Select、OrderBy 等)列表,以允许其他源文件中的函数避免“使用 System.Linq”,并允许通过引用快速找到所有 Linq 调用。

原来存在未记录(并且显然无法访问)的扩展方法版本,例如 EnumerableRowCollection.Select() 被传递隐藏,并且在扩展类中定义,到目前为止我不能找到。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多