0

データセットにいくつかのデータがあり、通常は以下に示すようにレコードを選択します。

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 で同じことを行うには、次のことを期待しますが、Fieldキーワードの下に波状の線が表示されます。

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: 演算子 '==' は型 'string' および 'char' のオペランドには適用できません

...しかし、「TechKey フィールドは間違いなく DataSet の文字列です。

4

1 に答える 1

3

System.Data.DataSetExtensions.dllへの参照を追加する必要がある可能性があります。

欠落しているメソッドは、実際には拡張メソッドです。

また、変更します。

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()(あなたがそれを持っていた場所)はあなたが思っていることをしていません。

于 2011-11-10T11:42:08.083 に答える