【问题标题】:Error occurs when retrieving column values from a DataTable LINQ query从 DataTable LINQ 查询中检索列值时发生错误
【发布时间】:2014-05-22 03:35:37
【问题描述】:

问题一:

我正在编写一个查询来获取 DataTable 中一行的索引:

var index = from row in DataTable1.AsEnumerable()
let r = row.Field<string>("Column1") 
where r == strColumn1 
select DataTable1.Rows.IndexOf(row);

然后我尝试对多个列进行此操作

var index = from row in DataTable1.AsEnumerable()
let r = row.Field<string>("Column1") && s = row.Field<int>("Column2")
&& t = row.Field<string>("Column3") && u = row.Field<string>("Column4")
where r == strColumn1 && s == intColumn2 && t == strColumn3 && u == strColumn4
select DataTable1.Rows.IndexOf(row);

有可能吗?

问题2:

来自@DominicZukiewicz 的回答在这样的多个列上使用let 时,出现错误:

var index = from row in DataTable1.AsEnumerable()
let r = row.Field<string>("Column1")
let s = row.Field<int>("Column2")
let t = row.Field<string>("Column3")
let u = row.Field<string>("Column4")
where r == strColumn1 && s == intColumn2 && t == strColumn3 && u == strColumn4
select DataTable1.Rows.IndexOf(row);

DataTable1.Rows[index]["Columnx"] = intUpdateValueColumnx;
DataTable1.Rows[index]["Columny"] = intUpdateValueColumny;
DataTable1.Rows[index]["Columnz"] = intUpdateValueColumnz;
DataTable1.AcceptChanges();

它的形式是:

附加信息:无法将“System.Data.EnumerableRowCollection`1[System.Int32]”类型的对象转换为“System.IConvertible”类型。

我哪里错了?

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • @cahmad:请您在给出答案后更新您的问题,以便包含更多问题。您可以在另一个问题中交叉关联它们,但这意味着答案与问题不同步。

标签: c# linq


【解决方案1】:

只需为您需要的每个作业添加一个let

var index = from row in DataTable1.AsEnumerable()
   let r = row.Field<string>("Column1")
   let s = row.Field<int>("Column2")
   let t = row.Field<string>("Column3")
   let u = row.Field<string>("Column4")
   where r == strColumn1 && s == intColumn2 && t == strColumn3 && u == strColumn4
   select DataTable1.Rows.IndexOf(row);

--

由于您更新了您的问题,我相应地更新了我的答案:

错误看起来像转换s 参数时出现问题,因为它无法将其转换为System.Int32

你确定“Column2”实际上是一个整数吗?

【讨论】:

  • 你无法像下面这样更新 DataTable1.Rows[index]["Columnx"] = intUpdateValue; DataTable1.Rows[index]["Coumny"] = intUpdateValue; DataTable1.AcceptChanges();
  • 我听不懂你在说什么
  • 你不能像 DataTable1.Rows[index]["Columnx"] = intUpdateValue; DataTable1.Rows[index]["Coumny"] = intUpdateValue;数据表1.AcceptChanges();。那么 index 的实际价值是多少呢?
  • .IndexOf() 获取DataTable 中指定行的行号。根据您的问题,我不知道您为什么想要它的上下文,但这是您所要求的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
相关资源
最近更新 更多