LINQ to Dataset больше не распознает ключевое слово «Field <string>» - PullRequest
0 голосов
/ 10 ноября 2011

У меня есть некоторые данные в наборе данных, и я обычно выбираю запись, как показано ниже.

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: оператор '==' нельзя применить к операндам типа 'string' и 'char'

... Но поле TechKey определенно является строкой в ​​наборе данных.

1 Ответ

3 голосов
/ 10 ноября 2011

Скорее всего, вам нужно добавить ссылку на 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 () (там, где он у вас был) не делает то, о чем вы думаете.

...