Linq to object:ToList无法转换为通用列表

时间:2009-05-08 16:26:45

标签: vb.net linq

Dim tenItem = From t In _InvalidFeeList _
                      From i In ItemCount _
                      Where t.FeeCode <> i.FeeCode _
                      Order By t.Description _
                      Ascending Take (10)


        Dim feeList As List(Of AccessorialFee) = tenItem.ToList()

我收到“无法转换为System.generic.list”错误。我全神贯注地看到这个错误,似乎我的代码应该适用于例如here

我不明白。有人能告诉我哪里弄错了吗?

编辑:我想我应该解释一下我在这里要做的事情。我想比较两个对象列表,如果FeeCode不等于ItemCount FeeCode中的对象,则从InvalidFeeList中选择对象,并从InvalidFeeList中获取前10个对象。

2 个答案:

答案 0 :(得分:3)

问题是你有两个“From”子句,所以结果不仅仅是原始集合的类型。虽然很容易修复 - 只需在最后添加一个投影:

Dim tenItem = From t In _InvalidFeeList _
              From i In ItemCount _
              Where t.FeeCode <> i.FeeCode _
              Order By t.Description _
              Ascending Take (10) _
              Select t  ' This is the new line '

Dim feeList As List(Of AccessorialFee) = tenItem.ToList()

编辑:您是否在_InvalidFeeList中找到FeeCode中<{1}}中任何项目中不存在ItemCount的项目?如果是这样,我建议做出这样的改变:

Dim feeCodes = From i In ItemCount Select i.FeeCode
Dim feeCodeSet = new HashSet(Of FeeCodeType)(feeCodes)

Dim tenItem = From t in _InvalidFeeList
              Where Not feeCodeSet.Contains(t.FeeCode)
              Order By t.Description _
              Ascending Take (10) 
Dim feeList As List(Of AccessorialFee) = tenItem.ToList()

正如你所看到的,我不知道FeeCode的类型,而VB并不是我的强项,但我希望你能得到一般的想法。这个建议假设您正在使用LINQ to Objects - 如果您正在使用LINQ to SQL,我不确定最好的方法。请注意,我们不再需要Select的{​​{1}}子句,因为我们现在只处理单个集合。

答案 1 :(得分:2)

_InvalidFeeList不是List(Of AccessorialFee)类型

[编辑]试试这个并添加断点和手表:

Dim tenItem = (From t In _InvalidFeeList _
                      From i In ItemCount _
                      Where t.FeeCode <> i.FeeCode _
                      Order By t.Description _
                      Ascending Take (10)).ToList().GetType()