我有这段代码:
var query = "SELECT * FROM Cats";
var conn = new SqlConnection(sqlConnectionString);
conn.Open();
var cmd = new SqlCommand(query);
var reader = cmd.ExecuteReader();
while (reader.Read())
{
var CatName = reader.GetString(0);
var CatDOB = reader.GetDateTime(1);
var CatStatus = reader.GetInt32(2);
}
我想将行提取到一个匿名类型集合中,通常我会使用LINQ进行迭代,但由于每次需要调用
.Read()
来获取下一行,所以我不确定是否可能。有什么方法可以做到这一点吗?
DbDataReader
实现了IEnumerable
,因此您实际上不需要定义自己的Select
,如果这是您的目标,您可以直接使用Cast
然后使用 LINQ select。 - ServyDbDataReader
需要转换为IDataRecord
:var values = dataReader.Cast<IDataRecord>().Select(r => new { PropertyOne = r["ValueOne"].TryCastOrParse<string>(), // etc. });
- Mark Avenius