LINQ - 指定的强制转换在使用dataview时无效

时间:2011-05-04 10:35:04

标签: c# linq datagridview

我试图根据传递的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)

请帮忙。

2 个答案:

答案 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