为什么我收到错误"The type arguments for method 'method' cannot be inferred from the usage. Try specifying



我有数据读取器扩展类:

public static class SqlDataReaderExtensions
{
public static List<T> ToList<T>(this IDataReader reader)
{
var list = new List<T>();
while (reader.Read())
{
var obj = Activator.CreateInstance<T>();
foreach (var prop in obj.GetType().GetProperties())
{
if (!Equals(reader[prop.Name], DBNull.Value))
{
prop.SetValue(obj, reader[prop.Name], null);
}
}
list.Add(obj);
}
return list;
}
public static IEnumerable<T> Select<T>(this IDataReader reader, Func<IDataReader, T> projection)
{
while (reader.Read())
{
yield return projection(reader);
}
}
}

我是这样使用的:

public async Task<IList<Department>> GetAllAsync(int pageIndex, int pageSize, string keyword, bool shared)
{
var parameters = new[]
{
new SqlParameter("@Keyword", SqlDbType.NVarChar) {Value = keyword},
new SqlParameter("@PageIndex", SqlDbType.Int) {Value = pageIndex},
new SqlParameter("@PageSize", SqlDbType.Int) {Value = pageSize},
new SqlParameter("@Shared", SqlDbType.Bit) {Value = shared},
};
using (var reader = await SqlHelper.ExecuteReaderAsync(_connectionString, CommandType.StoredProcedure, "GetAllDepartments", parameters))
{
return reader.Select(r =>
{
var p = new Department
{
Id = (int)r["ID"],
Name = r["Name"].ToString(),
Type = r["Type"].ToString()
};
return p;
}).ToList();
}
}

Select之后使用的ToList()方法是System.Linq.Enumerable方法,而不是上面编写的方法。

[__DynamicallyInvokable]
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) => source != null ? new List<TSource>(source) : throw Error.ArgumentNull(nameof (source));

相关内容

最新更新