C# 从DataTable LINQ查询检索列值时出错 问题1:

C# 从DataTable LINQ查询检索列值时出错 问题1:,c#,linq,C#,Linq,我正在编写一个查询以获取DataTable中某一行的索引: var index = from row in DataTable1.AsEnumerable() let r = row.Field<string>("Column1") where r == strColumn1 select DataTable1.Rows.IndexOf(row); 其形式如下: 其他信息:无法将类型为“System.Data.EnumerablerRowCollection

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

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

其他信息:无法将类型为“System.Data.EnumerablerRowCollection`1[System.Int32]”的对象强制转换为类型为“System.IConvertible”

我哪里出错了?

只需为您需要的每个作业添加一个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实际上是一个整数吗?

我已经编辑了你的标题。请看,如果共识是否定的,他们就不应该。@cahmad:请不要在给出答案后更新你的问题,然后再包含更多的问题。您可以在另一个问题中交叉关联它们,但这意味着答案与问题不同步。您无法像DataTable1那样按如下方式更新。行[index][Columnx]=IntuUpdate值;DataTable1.行[index][Coumny]=IntUpdate值;数据表1.1接受变化;我不明白你在说什么你不能像DataTable1那样做;DataTable1.行[index][Coumny]=IntUpdate值;DataTable1.AcceptChanges;。那么index的实际值是多少呢?.IndexOf获取数据表中指定行的行号。从你的问题来看,我不知道你为什么想要它,但这是你所要求的解决方案。
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();
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);