以通用方式传递属性



我正在阅读一个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。这可能吗?

你可以编写一个扩展方法,如下所示:

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();

最新更新