我正在尝试使用 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) :
我关心的部分是,“此 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/