2 Stimmen

LINQ to Objects - Ist nicht in?

Ich habe eine allgemeine Liste von benutzerdefinierten Objekten und möchte diese Liste auf Objekte reduzieren, bei denen ein bestimmter Eigenschaftswert nicht in einer Liste von Ausnahmen enthalten ist.

Ich habe Folgendes versucht:

Private Sub LoadAddIns()
  // Get add-in templates
  Dim addIns = GetTemplates(TemplateTypes.AddIn)
  // Get the current document
  Dim sectionId As String = CStr(Request.QueryString("sectionId"))
  Dim docId As Integer = CInt(Split(sectionId, ":")(0))
  Dim manual = GetTempManual(docId)
  Dim content As XElement = manual.ManualContent
  // Find which templates have been used to create this document.
  Dim usedTemplates = (From t In content.<header>.<templates>.<template> _
                       Select CInt(t.<id>.Value)).ToList
  // Exclude add-ins that have already been used.
  If usedTemplates IsNot Nothing Then
    addIns = addIns.Where(Function(a) usedTemplates.Contains(a.TemplateID) = False)
  End If
  // Bind available add-ins to dropdown
  With ddlAddIns
    .DataSource = addIns
    .DataTextField = "Title"
    .DataValueField = "TemplateID"
    .DataBind()
    .Items.Insert(0, New ListItem("[select an add-in]", 0))
  End With
End Sub

erhalten aber die Fehlermeldung:

System.InvalidCastException: Objekt vom Typ "Ungültig" kann nicht gecastet werden 'WhereListIterator 1[MyApp.Classes.Data.Entities.Template]' to type 'System.Collections.Generic.List 1[MyApp.Classes.Data.Entities.Template]'.

Wie kann ich nur die Vorlagen auswählen, bei denen die Vorlagen-ID nicht in der Liste der Ausnahmen enthalten ist?

5voto

tvanfosson Punkte 506878

Hängen Sie eine ToList()-Erweiterung an das Ende der Where-Erweiterung an, um sie wieder in eine Liste des entsprechenden Typs umzuwandeln.

If usedTemplates IsNot Nothing Then
    addIns = addIns.Where(Function(a) usedTemplates.Contains(a.TemplateID) = False) _
                   .ToList()
End If

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X