這裏是一個擴展方法:
public static class DataRowHelpers
{
private static readonly Dictionary<Type, MethodInfo> FieldSpecialized = new Dictionary<Type, MethodInfo>();
public static bool FieldHasValue(this DataRow row, Type type, string column)
{
MethodInfo fieldSpecialized;
if(!FieldSpecialized.TryGetValue(type, out fieldSpecialized))
{
var extensions = typeof(DataRowExtensions);
var fieldGeneric = extensions.GetMethod("Field",
new[] { typeof(DataRow), typeof(string) });
fieldSpecialized = fieldGeneric.MakeGenericMethod(type);
FieldSpecialized.Add(type, fieldSpecialized);
}
return fieldSpecialized.Invoke(null, new object[] { row, column }) != null;
}
}
用法:
var type = IsSqlServer ? typeof(int?) : typeof(long?);
var predicate = row.FieldHasValue(type, "id");
你不能使用'dynamic'關鍵字嗎? – MoonKnight
@Killercam工作!如果你把它作爲答案,我會盡可能標記它。 – mrK
很酷。我會的。謝謝。 – MoonKnight