【问题标题】:Working with Anonymous Types with Linq in VB, C#在 VB、C# 中使用 Linq 处理匿名类型
【发布时间】:2009-05-06 13:56:24
【问题描述】:

假设我像这样创建了两组元组:

    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 不知道集合具有统一的定义,它就不能对集合执行比较器,所以它会给我这个构建错误:

Option Strict On 不允许隐式 转换来自 'System.Collections.Generic.IEnumerable(的 )' 到 'System.Collections.Generic.IEnumerable(的 )'。

我如何处理这些集合的声明以使它们网格化? (谷歌运气不佳)

[编辑] 仍然得到相同的编译错误:

    '*** 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.Except(loTupleToolObjects)

错误 5 Option Strict On 不允许 隐式转换 'System.Collections.Generic.IEnumerable(的 )' 到 'System.Collections.Generic.IEnumerable(的 )'。

【问题讨论】:

    标签: c# vb.net linq types set


    【解决方案1】:

    如果匿名类型具有相同的属性名称和相同的顺序,它们应该是相同的类型(因此是兼容的)。

    编辑:根据 cmets 和更新的问题,我怀疑您缺少的一点是能够以匿名类型命名属性。改变这个:

    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”等
    • 两种匿名类型中各种属性的类型是否相同?
    • 啊!它们不是。他们现在是并且可以编译。出色的。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多