C# 如何处理DBNull值
我有上面引发异常的代码,因为C# 如何处理DBNull值,c#,datatable,dataset,dbnull,C#,Datatable,Dataset,Dbnull,我有上面引发异常的代码,因为MemberNo在customDT中是DBNull。在上述情况下,我不认为已经通过转换为object并与DBNull进行比较来显式地应用检查,而将硬代码转换为stringa或b您可以这样处理DBNull值: dataGrid.DataSource = customDS.customDT.AsEnumerable() .GroupBy(r => r.Field("someID"))
MemberNo
在customDT
中是DBNull
。在上述情况下,我不认为已经通过转换为object并与DBNull进行比较来显式地应用检查,而将硬代码转换为stringa
或b
您可以这样处理DBNull值:
dataGrid.DataSource = customDS.customDT.AsEnumerable()
.GroupBy(r => r.Field("someID"))
.Select(g => {
CustomDS.customRow row = customDS.customDT.NewcustomRow();
row["someID"] = g.Key;
row["Tradingdate"] = g.First().Tradingdate;
row["MemberNo"] = ((object)g.First().MemberNo == DBNull.Value) ? "a" : "b";
row["Amt"] = (decimal?)g.Sum(r => r.Field("Amt"));
return row;
}).CopyToDataTable();
我创建了通用方法来获取值并处理
DBNull
场景
row["CancelledDate"] == DBNull.Value ? (DateTime?)null :
Convert.ToDateTime(row["CancelledDate"]);
问题是MemberNo不能为null。 如果没有空检查,则不能使用First()的结果。 相反,请使用
g.FirstOrDefault()
显然,有一个
IscolumnnameNull()
方法可以被调用来处理DBNull
值?g.First()有什么问题。MemberNo==null?您确切地得到了什么异常?您确定g.First()
有属性MemberNo
。如果customDT
的类型是DataTable
那么g.First()
应该是DataRow
你能试一下我的答案吗?我想g.First().Field(“MemberNo”)==null?“a”:“b”
。DataRow.Field(columnName)
将返回null
如果Field包含DbNull
它的group by子句,并且第一个应该在那里…否则将没有group另一个点是它在DataRow上的group by,这意味着第一个()的返回值将是DataRow这已经存在:DataRow.Field(“columnName”)代码>;)@Fabio-不明白吗?如果表中不存在columnName,我宁愿抛出异常,然后将其隐藏在默认值后面。@Fabio-这是基于要求的,在我的代码中有sp,如果pass getall=1,它将返回表中的所有列,如果pass getall=0,它将不返回部分列,我有获取数据的通用代码,所以我需要它,如果不需要OP删除该部分,在g.First()中没有什么大不了的。字段(“MemberNo”)
将返回nullDateTime
,如果字段包含DbNull.value
public static T GetColumnValue<T>(string columnName, DataRow dr)
{
Type typeParameterType = typeof(T);
//dr.Table.Columns.Contains(columnName)
//this line can be removed if you are sure you are going to get columns
//it all depends on requirement and preference
return dr.Table.Columns.Contains(columnName) && dr[columnName] != DBNull.Value
? (T) Convert.ChangeType(dr[columnName] , typeParameterType)
: default(T);
}
row["MemberNo"] = string.IsNullOrEmpty(GetColumnValue("MemberNo", g.First()))
? "a" : "b";
var m = g.FirstOrDefault();
row["MemberNo"] = m != null ? "a" : "b";
row["MemberNo"] = g.First().IsMemberNoNull() ? "a" : "b";