我正在阅读SqlCeDataReader并评估类似的值:
if(reader["abc"] != DBNull.Value)
Abc = (int)reader["abc"];
if(reader[dude] != DBNull.Value)
Dude = (string)reader[dude];
int Abc
{
get;
set;
}
string Dude
{
get;
set;
}
我想将它浓缩为一个函数,但代码量最少,理想情况下我喜欢这样的东西:
Dude = GetField( "dude", reader );
如果没有什么可以返回的话,让它自己返回NULL。这可能吗?
答案 0 :(得分:3)
你可以编写一个扩展方法,如:
public static string GetSafeString(this IDataReader reader, string name)
{
int ordinal = reader.GetOrdinal(name);
return reader.IsDBNull(ordinal) ? null : reader.GetString(ordinal);
}
并使用:
Dude = reader.GetSafeString("dude");
然而!就个人而言,我建议看看像dapper-dot-net这样的东西,它将为你处理的所有物化代码,所以你只需写一下:
string region = "North";
var users = connection.Query<User>(
"select * from Users where Region = @region", // <=== query
new { region } // <=== parameters
).ToList();