2011-11-10 47 views
0

我在数据集中有一些数据,我通常会选择一条记录,如下所示。LINQ to Dataset不再识别“字段<string>”关键字

SnapshotDS.SnapshotRow[] previousRow = 
    m_PreviousSnapshot.Snapshot.Select(string.Format("TechKey = '{0}'", ChangeRow.TechKey)) 
     as SnapshotDS.SnapshotRow[]; 

ChangeRow.Prev_Staff_No = previousRow[0].Staff_No; 

为了做相同的LINQ,我希望做到以下几点,但我得到的关键字下波浪线。

var pRow = from p in m_PreviousSnapshot.Snapshot.AsEnumerable() 
      where p.Field<string>("TechKey") == ChangeRow.TechKey 
      .Single() 
      select p; 

ChangeRow.Prev_Staff_No = p.Staff_No; 

我以前用过类似的LINQ很多次,从来没有这个问题。

有什么建议吗?

编辑

编译器的错误,我得到的是:

错误CS0019:运算符 '==' 不能应用于类型 '串' 和 '炭'

的操作数

...但是“TechKey字段绝对是DataSet中的一个字符串”。

+0

在LINQ查询中选择单词TechKey。按F12。它的类型是什么? – mjwills

+0

如果我按下TechKey高亮显示的F12,我将显示一个密封的类String。 – TeamWild

回答

3

您可能需要添加对System.Data.DataSetExtensions.dll的引用。

缺失的方法实际上是extension methods

而且改变:

var pRow = from p in m_PreviousSnapshot.Snapshot.AsEnumerable() 
     where p.Field<string>("TechKey") == ChangeRow.TechKey 
     .Single() 
     select p; 

到:

var pRows = from p in m_PreviousSnapshot.Snapshot.AsEnumerable() 
     where p.Field<string>("TechKey") == ChangeRow.TechKey 
     select p; 
var pRow = pRows.Single(); 

的。单()(在这里你有它)是不是做你认为它是。

+0

我有一个项目引用“System.Data.DataSetExtensions”,我也“使用System.Data;”。 – TeamWild

+0

好东西。这就是问题所在的“单一”声明......你说得对,它没有达到我的预期,实际上我想用“First”。 :O) – TeamWild