Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在VB,C中使用Linq处理匿名类型#_C#_Vb.net_Linq_Types_Set - Fatal编程技术网

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 )”以 '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 )”以 '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”等。注意两种匿名类型中不同属性的类型是否相同?啊!他们不是。它们现在正在编写中。杰出的多谢各位。