从 .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
我正在将我们的项目从 .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