العمل مع مجهول أنواع مع Linq في VB, C#
سؤال
أقول إنشاء مجموعتين من المجموعات مثل ذلك:
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)
ومن الواضح أن ينق لا يمكن إجراء المقارنة على مجموعات إذا كان لا يعرف مجموعات موحدة تعريفات, لذلك سوف تعطيني هذا بناء خطأ:
الخيار صارم لا يسمح ضمنيا التحويلات من 'System.مجموعات.Generic.IEnumerable(من < مجهول النوع>)' إلى 'System.مجموعات.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)
الخطأ هنا هو:
خافت loTupleSetDifference = loTupleDatabaseTools.باستثناء(loTupleToolObjects)
خطأ 5 الخيار صارم لا يسمح ضمني التحويلات من 'System.مجموعات.Generic.IEnumerable(من < مجهول النوع>)' إلى 'System.مجموعات.Generic.IEnumerable(من < مجهول النوع>)'.
المحلول
إذا كان مجهول الأنواع لها نفس الأسماء الملكية مع نفس النوع في نفس الترتيب ، ينبغي أن تكون نفس أنواع (وبالتالي متوافق).
تحرير:على أساس التعليقات تحديث السؤال, وأظن بت كنت في عداد المفقودين هو القدرة على اسم الخصائص في مجهول أنواع.تغيير هذا:
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
طالما هي أنواع اليمين ، ثم قد يكون حسنا مع عدم وجود المزيد من العمل.