从 .NET 3.5 迁移到 4.0 后使用强类型数据的 LINQ to DataSet

LINQ to DataSet with strongly typed data after migration from .NET 3.5 to 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 中保留类型安全、非魔术字符串代码?

不确定为什么它对您不起作用,但这对我有用:

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

事实证明,数据集在转换过程中被弄乱了。重新生成它们后(在设计器中打开一个,"Run Custom Tool" 在所有数据集上)修复了继承。

另请参阅:Typed Dataset not using TypedTableBase in .NET 4