c# - 数据表选择方法 "not intended to be used"?

标签 c# .net linq visual-studio-2012

我正在尝试使用 LINQ 表达式将 DataTable 中的每一行转换为 List 对象中的条目。

我的代码:

DataTable dataTable = dataSet.Tables[0];

var intList = new List<int>(dataTable.AsEnumerable().Select(row => int.Parse(row["IntColumn"].ToString())));

这在我运行代码时确实有效,但我很担心,因为当我将鼠标悬停在我对 .Select() 的使用上时,我看到了这个(注意:我使用的是 ReSharper 8.2.2000.5102) :

Resharper tooltip for .Select()

我关心的部分是,“此 API 支持 .NET Framework 基础结构,不打算直接在您的代码中使用。”

我的问题是:如果我不应该使用 .Select() 的 EnumerableRowCollection 实现,我应该怎么做?

最佳答案

可枚举行集合被标记为“内部 API 类”(https://msdn.microsoft.com/en-us/library/bb907979(v=vs.110).aspx),因此您会收到该“警告”,因为它包含在文档中。

许多选择也被标记为“内部 API”,特别是您正在使用的那个。您必须在选择之前使用 .ToList() 将其转换为列表,或者您可以编写如下 LINQ 查询:

var intList = (from r in dataTable.AsEnumerable() 
               select int.Parse(r["IntColumn"].ToString())).ToList()

您还可以使用未标记为 API 的 Select 语句之一,特别是:

Select<TRow, TResult>(Func<TRow, TResult>)
Select<TRow, TResult>(Func<TRow, Int32, TResult)

或名称相似的重载之一。有关详细信息,请参阅链接的文档。很难强制它从一个重载到另一个重载,因为许多重载包含相同的签名,所以这可能是问题所在。

关于c# - 数据表选择方法 "not intended to be used"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31791537/

相关文章:

c# - 以互操作 C++ 的数组形式返回数据的更快方法

c# - 使用 MVVM 构建选项列表

c# - 我如何使用 LINQ 将这个父子对象模型投影到一个平面的单个对象中?

.net - IIS7 或 .Net 301 从 1 个域重定向到另一个域

c# - 什么架构使用 system.runtime.serialization.ISerializable?

c# - 通用 List.Count 给出 System.ArgumentException

c# - 使用 Linq、JSON.NET、C# 查询 JSON 嵌套数组

c# - 用于选择具有包含值的另一个列表属性的列表项的复杂 Linq 查询

c# - 从内存集合中快速自动完成 (.NET)

c# - "where"在 C# 类声明中意味着什么?