我试图根据传递的col获取行的存在。该列作为MultiSelect来自数据库。
bool bCFPresent = IsMultiSelectCFPresent(dvDataTag, "MultiSelect");
public static bool IsPresent(DataView dvDataTag, string colName)
{
return ((from DataRowView drv in dvDataTag
where drv.Row.Field<short>(colName) == 1
select drv).Count() > 0 ? true : false);
}
但是我收到了这个错误: -
System.InvalidCastException是 未按用户代码处理
Message =“指定的演员表无效。” 来源= “System.Data.DataSetExtensions” 堆栈跟踪: 在System.Data.DataRowExtensions.UnboxT`1.ValueField(Object 值) 在System.Data.DataRowExtensions.Field [T](DataRow row,String columnName)
请帮忙。
答案 0 :(得分:1)
问题似乎是名为colName
的列的类型无法转换为短...
总的来说,您的代码似乎没有多大意义。每列的行数相同。相反,尝试直接检查列,例如:
public static bool IsPresent(DataView dvDataTag, string colName)
{
return dvDataTag.Table.Columns.Cast<DataColumn>().
Any(c => c.ColumnName == colName);
}
答案 1 :(得分:0)
我不确定你在谓词中想要做什么
drv.Row.Field<short>(colName) == 1
但您的IsPresent
方法可以重写为
<强>更新强>
public static bool IsPresent(DataView dvDataTag, string colName)
{
return dvDataTag.Any(drv => string.Equals("1",drv[colName].ToString()));
}
对于行计数
int count = dvDataTag.Count(drv => string.Equals("1",drv[colName].ToString()));
PS:处理空值留给OP