将 DataRowCollection 转换为 IEnumerable<T>
Posted
技术标签:
【中文标题】将 DataRowCollection 转换为 IEnumerable<T>【英文标题】:Convert DataRowCollection to IEnumerable<T> 【发布时间】:2011-06-25 20:10:19 【问题描述】:我想在 .NET 3.5 中做这样的事情。最快的方法是什么?
IEnumerable<DataRow> collection =
TypedDataSet.TypedTableBase<DataRow>.Rows as IEnumerable<DataRow>;
【问题讨论】:
【参考方案1】:您可以在DataRowCollection
上致电OfType<DataRow>()
。
【讨论】:
这是最简单的解决方案 这实际上与在 DataRowCollection 上调用 CastIEnumerable
s 中绝对不是。
对,我并不是说 IEnumerable假设您使用的是 .NET 4.0,它引入了协方差:
// Presumably your table is of some type deriving from TypedTableBase<T>,
// where T is an auto-generated type deriving from DataRow.
IEnumerable<DataRow> collection = myTypedTable;
table type itself 实现了IEnumerable<T> where T : DataRow
。
否则:
IEnumerable<DataRow> collection = myTypedTable.Cast<DataRow>();
【讨论】:
这和 wsanville 的答案与我有关。碰巧 Cast一个简单的直接解决方案是使用 System.Data.DataTable 对象的方法“Select()”,它会生成“DataRow[]”。从此,您可以使用 Linq 将其视为 IEnumberable,如下所示:
List<MyItem> items = dtItems.Select().Select(row => new MyItem(row)).ToList();
为每一行提供一个有用的对象列表。
【讨论】:
【参考方案4】:如果您在项目中包含System.Data.DataSetExtensions.dll
,则会有一个内置的扩展方法来添加AsEnumerable()
方法。
IEnumerable<DataRow> collection = TypedDataSet.TypedTableBase<DataRow>.AsEnumerable();
【讨论】:
以上是关于将 DataRowCollection 转换为 IEnumerable<T>的主要内容,如果未能解决你的问题,请参考以下文章
令人惊讶的性能差异:List.Contains、Sorted List.ContainsKey、DataRowCollection.Contains、Data Table.Select、DataTab