LINQ to DataSet со строго типизированными данными после перехода с.NET 3.5 на 4.0

Я нахожусь в процессе миграции наших проектов с.NET 3.5 на.NET 4.0. Ранее я имел обыкновение использовать операторы для типизированных наборов данных, таких как:

dr = myDataSet.SomeTable.FirstOrDefault(Function(x) x.IdSome = targetId)

Это, однако, больше не работает. Я уже пытался добавить ссылку на System.Data.DataSetExtensions и измените код для использования .AsEnumerable() - однако, это только дает DataRowне SomeRow (как будет содержаться в SomeTable)

dr = myDataSet.SomeTable.AsEnumerable().FirstOrDefault(Function(x) x.IdSome = targetId)

В результате ошибка 'IdSome' is not a member of 'System.Data.DataRow' - некоторые другие утверждения терпят неудачу с Overload resolution failed по той же причине.

Как я могу сохранить тип, не магический строковый код в.NET 4.0?

2 ответа

Решение

Оказывается, что наборы данных были перепутаны во время преобразования. После их регенерации (открытие в конструкторе "Запустить пользовательский инструмент" для всех наборов данных) исправлено наследование.

См. Также: Типизированный набор данных не использует TypedTableBase в.NET 4

Не уверен, почему это не работает для вас, но это работает для меня:

Sub Main()
    Dim ds As New DataSet1

    ds.SomeTable.AddSomeTableRow("SomeDescription")
    ds.AcceptChanges()

    Dim dr As DataSet1.SomeTableRow = ds.SomeTable.FirstOrDefault(Function(x) x.Id = 1)

    Console.WriteLine(dr.Id)
    Console.WriteLine(dr.Description)

End Sub
Другие вопросы по тегам