执行查询后,结果存储在Datatable中
必须转换为List.
DatatableToList()
是一种扩展方法,它将做同样的事情.
仅显示相关代码
呼叫者
var results= dh.ExecuteDataSet<EmployeeModel>("USP_GetEmployeeByID",new Dictionary<string,IConvertible>() { {"@ID",1000} });
DAL代码
public IEnumerable<T> ExecuteDataSet<T>(string storedProcname,IDictionary<string,IConvertible> parameters = null) { var result = db.ExecuteDataSet(q); Datatable dtResult = result.tables[0]; var t = dtResult.DatatableToList<T>(); //Compile time error: The type T must be a reference type in order to use it as parameter return t; }
扩展方法
public static List<T> DatatableToList<T>(this Datatable table) where T : class,new() { try { List<T> List = new List<T>(); foreach (var row in table.AsEnumerable()) { T obj = new T(); foreach (var prop in obj.GetType().GetPropertIEs()) { try { PropertyInfo propertyInfo = obj.GetType().GetProperty(prop.name); propertyInfo.SetValue(obj,Convert.ChangeType(row[prop.name],propertyInfo.PropertyType),null); } catch { continue; } } List.Add(obj); } return List; } catch { return null; } }
问题是扩展方法调用给出了编译时错误
06003
那么对扩展方法进行哪些更改以使其接受泛型作为参数?
解决方法 这个程序:public IEnumerable<T> ExecuteDataSet<T>( string storedProcname,IConvertible> parameters = null)
还需要类型参数.
where T : class,new()总结
以上是内存溢出为你收集整理的c# – 将泛型传递给扩展方法全部内容,希望文章能够帮你解决c# – 将泛型传递给扩展方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)