我试图使用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 ):
与我有关的部分是&#34;此API支持.NET Framework基础结构,不能直接在您的代码中使用。&#34;
我的问题是:如果我不应该使用.Select()的EnumerableRowCollection实现,我应该怎么做呢?
答案 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)
或其中一个类似命名的重载。有关详细信息,请参阅链接文档很难强制它从一个重载到另一个重载,因为许多重载包含相同的签名,所以这可能是问题。