使用数据视图时,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]

使用数据视图时,LINQ指定的类型转换无效

问题似乎是命名为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