DataTable选择方法"不打算使用"?

时间:2015-08-03 15:46:28

标签: 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()

与我有关的部分是&#34;此API支持.NET Framework基础结构,不能直接在您的代码中使用。&#34;

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

1 个答案:

答案 0 :(得分:3)

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

许多选项也标记为“内部API”,特别是您正在使用的选项。您必须在select之前将其转换为.ToList()的List,或者您可以编写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)

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