2011-11-10 3 views
0

データセットにデータがあり、通常は以下のようにレコードを選択します。 LINQ to Datasetは "Field <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を何度も使用していましたが、これは決してこの問題を抱えませんでした。

提案がありますか?

EDIT

私が取得コンパイラエラーがある:

エラーCS0019:演算子 '==' はタイプ '文字列' と「シャア

のオペランドに適用することはできません

...しかし、TechKeyフィールドは、データセット内の文字列です。

+0

LINQクエリでTechKeyという単語を選択します。 F12を押します。そのタイプは何ですか? – mjwills

+0

TechKeyを強調表示してF12キーを押すと、封印されたクラス文字列が表示されます。 – 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(); 

.Single()。

+0

"System.Data.DataSetExtensions"へのプロジェクト参照があり、 "System.Data;も使用しています。" – TeamWild

+0

素晴らしいもの。それは問題だった "シングル"ステートメントでした...そして、あなたは正しい、それは私が期待したことをしていなかった、実際には私は "ファースト"を使用したいと思っていました。 :o) – TeamWild

関連する問題