以通用方式传递财产?

时间:2012-05-31 06:56:51

标签: .net generics compact-framework sql-server-ce sqlcedatareader

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

1 个答案:

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