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