使用数据视图时,LINQ指定的类型转换无效
本文关键字:类型转换 无效 LINQ 数据 视图 | 更新日期: 2023-09-27 17:54:31
我试图获得基于传递的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);
}
但是我得到这个错误:-
系统。InvalidCastException是用户代码无法处理
消息="指定的强制转换无效。"源= " System.Data.DataSetExtensions "加:在System.Data.DataRowExtensions.UnboxT 1. valuefield(对象值)(我们应该在System.Data.DataRowExtensions.Field [T]
问题似乎是命名为colName
的列的类型不能被强制转换为短…
总的来说,您的代码似乎没有多大意义。每列的行数是相同的。相反,尝试直接检查列,例如:
public static bool IsPresent(DataView dvDataTag, string colName)
{
return dvDataTag.Table.Columns.Cast<DataColumn>().
Any(c => c.ColumnName == colName);
}
我不太确定你想在你的谓词
做什么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