[英]Convert foreach to LINQ statement
linq expresson是做什么用的? 我不知道如何将foreach语句更改为linq表达式。
public static IList<T> ToList<T>(this System.Data.DataTable table, Dictionary<string, string> mappings)
where T : new()
{
IList<PropertyInfo> properties = typeof (T).GetProperties().ToList();
IList<T> result = new List<T>();
foreach (var row in table.Rows)
{
var item = CreateItemFromRow<T>((System.Data.DataRow) row, properties, mappings);
result.Add(item);
}
return result;
}
您可以使用简单的Select()
语句。 但是,因为DataTable.Rows
是未实现IEnumerable<DataRow>
的DataRowCollection
,所以需要首先调用OfType<DataRow>()
:
public static IList<T> ToList<T>(this System.Data.DataTable table, Dictionary<string, string> mappings)
where T : new()
{
IList<PropertyInfo> properties = typeof(T).GetProperties().ToList();
return table.Rows.OfType<DataRow>().Select(row => CreateItemFromRow<T>(row, properties, mappings))
.ToList();
}
正如Harald在评论中建议的那样,您可以使用Cast<DataRow>
代替OfType<DataRow>
。 区别在于OfType
检查是否可以进行Cast
类型转换,并且仅返回可Cast
元素, Cast
将Cast
所有元素(如果Cast
类型无效则抛出)。 由于我们知道此集合中的所有元素均为DataRow
类型,因此可以节省检查时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.