C# 在VB,C中使用Linq处理匿名类型#
假设我创建两组元组,如下所示:C# 在VB,C中使用Linq处理匿名类型#,c#,vb.net,linq,types,set,C#,Vb.net,Linq,Types,Set,假设我创建两组元组,如下所示: Dim losSPResults As List(Of spGetDataResults) = m_dcDataClasses.spGetData.ToList Dim loTupleKeys = From t In losSPResults Select t.key1, t.key2 '' Query on an existing dataset: Dim loTupleExistingKeys = from t in m_lo
Dim losSPResults As List(Of spGetDataResults) = m_dcDataClasses.spGetData.ToList
Dim loTupleKeys = From t In losSPResults Select t.key1, t.key2
'' Query on an existing dataset:
Dim loTupleExistingKeys = from t in m_losSPResults Select t.key3, t.key4
Dim loTupleSetDifference = loTupleKeys.Except(loTupleExistingKeys)
现在我想对这两个列表执行如下设置操作:
Dim losSPResults As List(Of spGetDataResults) = m_dcDataClasses.spGetData.ToList
Dim loTupleKeys = From t In losSPResults Select t.key1, t.key2
'' Query on an existing dataset:
Dim loTupleExistingKeys = from t in m_losSPResults Select t.key3, t.key4
Dim loTupleSetDifference = loTupleKeys.Except(loTupleExistingKeys)
显然,如果Linq不知道集合有统一的定义,它就不能对集合执行比较器,因此它会给我这个构建错误:
选项Strict On不允许隐式
从
'System.Collections.Generic.IEnumerable(Of
'*** If we have initialized the list of tools, check to make sure it's up to date
Dim loTupleDatabaseTools = From tt In lottTorqueTools _
Select StationIndex = tt.station_index, SlotNumber = tt.slot_number
Dim loTupleToolObjects = From tt In m_lottTorqueTools _
Select StationIndex = tt.StationIndex, SlotNumber = tt.SlotNumber
Dim loTupleSetDifference = loTupleDatabaseTools.Except(loTupleToolObjects)
错误如下:
Dim loTupleSetDifference=loTupleDatabaseTools.Exception(loTupleToolObjects)
错误5选项严格禁止
隐式转换
'System.Collections.Generic.IEnumerable(Of
如果匿名类型具有相同的属性名,并且具有相同的类型,并且具有相同的顺序,则它们应该是相同的类型(因此是兼容的) 编辑:根据评论和更新的问题,我怀疑您缺少的是以匿名类型命名属性的功能。更改此项:
Dim loTupleExistingKeys = from t in m_losSPResults Select t.key3, t.key4
为此:
Dim loTupleExistingKeys = from t in m_losSPResults Select key1=t.key3, key2=t.key4
只要类型是正确的,您就可以不用再做更多的工作了。如果匿名类型具有相同的属性名,并且具有相同的类型,并且顺序相同,那么它们应该是相同的类型(因此兼容) 编辑:根据评论和更新的问题,我怀疑您缺少的是以匿名类型命名属性的功能。更改此项:
Dim loTupleExistingKeys = from t in m_losSPResults Select t.key3, t.key4
为此:
Dim loTupleExistingKeys = from t in m_losSPResults Select key1=t.key3, key2=t.key4
只要类型正确,您就可以不再工作。啊。我对上面列的名称进行了编辑。这一定是问题所在——名字不同?我该如何解决这个问题呢?我希望可以,但不幸的是,我们的DBA选择不将列名与我们用于代码的命名约定一致。一个数据集由存储过程结果集组成,另一个是对象列表。有没有一种简单的方法可以更改或忽略这些名称,或者我必须将它们复制到统一命名的数据集中?这些都是匿名类型,对吗?您可以选择名称:“Select Key3=t.Key1”等。注意两种匿名类型中不同属性的类型是否相同?啊!他们不是。它们现在正在编写中。杰出的非常感谢。我对上面列的名称进行了编辑。这一定是问题所在——名字不同?我该如何解决这个问题呢?我希望可以,但不幸的是,我们的DBA选择不将列名与我们用于代码的命名约定一致。一个数据集由存储过程结果集组成,另一个是对象列表。有没有一种简单的方法可以更改或忽略这些名称,或者我必须将它们复制到统一命名的数据集中?这些都是匿名类型,对吗?您可以选择名称:“Select Key3=t.Key1”等。注意两种匿名类型中不同属性的类型是否相同?啊!他们不是。它们现在正在编写中。杰出的多谢各位。