。除了<t>抛出异常</t>

时间:2010-03-21 00:31:32

标签: asp.net vb.net linq

我有以下代码:

Public Shared Function GetAvailableManufacturers() As List(Of Manufacturer)
    'first get all the live orders and extract their mfrs'
    Dim sos As List(Of OrderForm) = GetFormsByStatus(StockStatus.Building)
    Dim unavailableMfrs As New List(Of Manufacturer)
    For Each so As StockingOrder In sos
        unavailableMfrs.Add(so.Source)
    Next

    'then remove all mfrs with an open SO from a list of all mfrs'
    Dim allMfrs As List(Of Manufacturer) = Manufacturer.GetManufacturers
    Return allMfrs.Except(unavailableMfrs) <----- error here
End Function

上述内容的解释:

  • GetFormsByStatus()不言自明
  • GetManufacturers()返回数据库中所有制造商的列表

我想要获得制造商的想法是获取我的开放表格中的所有制造商的列表,然后获得所有制造商的列表并排除第一个列表中的所有制造商,如图所示(伪):

List A: {1,2,3,4,5,6,7,8,9,10}
List B: {5,7,10}
Result: {1,2,3,4,6,8,9}

我已根据this article设置了Manufacturer课程,以便进行比较,但我仍然会收到此错误:

  

无法将“<ExceptIterator>d__92'1[csCore.Manufacturer]'”类型的对象投射到“System.Collections.Generic.List'1[csCore.Manufacturer]”类型。

我一开始认为,因为在测试GetFormsByStatus()期间返回0结果可能会导致问题,但如果提供的列表有0个项目Except()不起作用则没有意义。谁能发现我做错了什么?

非常感谢!

3 个答案:

答案 0 :(得分:16)

该函数需要List(Of Manufacturer)返回类型,而不是IEnumerable(Of Manufacturer),因此在返回值中添加.ToList()应修复它:

Return allMfrs.Except(unavailableMfrs).ToList()

答案 1 :(得分:3)

您的函数被声明为返回List(Of Manufacturer),但您的Return语句仅返回IEnumerable(Of Manufacturer)。将return语句更改为:

Return allMfrs.Except(unavailableMfrs).ToList()

如果你打开Option Strict On,我相信VB会在编译时捕获这种错误,而不是在运行时爆炸。

答案 2 :(得分:3)

问题是Enumerable.Except会返回IEnumerable<T>,但您的返回类型为List(Of T)

将您的最后一行更改为:

Return allMfrs.Except(unavailableMfrs).ToList()