LINQ to Objects - нет в? - PullRequest
       7

LINQ to Objects - нет в?

2 голосов
/ 24 апреля 2009

У меня есть общий список пользовательских объектов, и я хотел бы сократить этот список до объектов, для которых значение определенного свойства отсутствует в списке исключений.

Я пробовал следующее:

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

но получите ошибку:

System.InvalidCastException: невозможно преобразовать объект типа 'WhereListIterator 1[MyApp.Classes.Data.Entities.Template]' to type 'System.Collections.Generic.List 1 [MyApp.Classes.Data.Entities.Template].

Как выбрать только те шаблоны, для которых идентификатор шаблона отсутствует в списке исключений?

1 Ответ

5 голосов
/ 24 апреля 2009

Прикрепите расширение ToList () к концу расширения Where, чтобы преобразовать его обратно в список соответствующего типа.

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