我有一个数据DataReader,我希望将其转换为List<T>.对此有什么简单的解决方案?
例如,在CustomerEntity类中,我有CustomerId和CustomerName属性.如果我的DataReader将这两列作为数据返回,那么我该如何将其转换为List<CustomerEntity>.
我需要在任何像这样的IDataReader实现上使用Linq
var c = sqlDataReader.AsEnumerable().Count();
Run Code Online (Sandbox Code Playgroud)
例:
public abstract class Test
{
public abstract SqlDataReader GetSqlDataReader();
public void Foo()
{
SqlDataReader sqlDataReader = GetSqlDataReader();
IEnumerable<SqlDataReader> sqlEnumerable = sqlDataReader.AsEnumerable();
var c = sqlEnumerable.Count();
var s = sqlEnumerable.Sum();
SqlDataReader first = sqlEnumerable.First();
var t = first.GetSqlXml(10);
}
}
Run Code Online (Sandbox Code Playgroud)
写这个的最好方法是什么.请写下你的代码片段.
我通过以下方式在EF Core 2.0中调用存储过程.
private async Task<IEnumerable<TEntity>> InvokeStoredProcedureAsync(string entityName)
{
var storedProcedureName = string.Format(CultureInfo.InvariantCulture, "sp_{0}BulkSelect", entityName);
dynamic temp;
using (MyDbContext MyDbContext = new MyDbContext(_options))
{
MyDbContext.Database.OpenConnection();
DbCommand cmd = MyDbContext.Database.GetDbConnection().CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = storedProcedureName;
using (var reader = cmd.ExecuteReader())
{
temp = reader.Cast<Task<IEnumerable<TEntity>>>();
}
}
return await temp;
}
Run Code Online (Sandbox Code Playgroud)
我需要转换DbDataReader为Task<IEnumerable<TEntity>>.
但是在尝试扩展temp变量以查看其值时,我收到此错误.
读取器关闭时无效尝试调用FieldCount.
请参阅随附的屏幕截图.
c# entity-framework entity-framework-core asp.net-core ef-core-2.0