【问题标题】:How to cast an IQueryable to a type List (Of Orders)如何将 IQueryable 转换为类型列表(订单)
【发布时间】:2015-07-30 12:07:21
【问题描述】:

几天前我问了一个问题,关于如何使用基于索引的解决方案通过记录向网页添加分页。

我需要能够使用两个参数来更改订单列表的排序:strSortBy 和 strSortDirection。

我正在尝试使用 IQueryable 查询:

query = temporders.AsQueryable.OrderBy(strSortBy + " " + strSortDirection)

但我收到一个错误:

Unable to cast object of type 'System.Linq.EnumerableQuery`1[Order]' to type 'System.Collections.Generic.List`1[Order]'.

行:

orderList.Items = query

这是我的向上(下一步)按钮代码:

Dim temporders As System.Collections.Generic.List(Of Order) = orderList.Items

If Not temporders Is Nothing And Not String.IsNullOrEmpty(strSortBy) Then
    Dim query As IQueryable = Nothing
    query = temporders.AsQueryable.OrderBy(strSortBy + " " + strSortDirection)
    orderList.Items = query
End If

我在作业中做错了什么?任何指导表示赞赏。

谢谢。

更新

我更改了我的代码,因此我将 OrderBy 应用于 oderList.Items,而不是应用于 tempOrders

orderList.Items.AsQueryable.OrderBy(strSortBy + " " + strSortDirection)

更新

我能够让它这样工作:

orderList.Items = orderList.Items.AsQueryable.OrderBy(strSortBy + " " + strSortDirection).ToList

【问题讨论】:

  • orderList.Items的类型是什么?
  • orderList 声明:Dim orderList As Orders。通过查看对象定义,我认为它是字符串类型的。

标签: asp.net vb.net linq


【解决方案1】:

调用ToList 将查询具体化为列表:

orderList.Items = query.ToList()

但是当不清楚为什么时,你似乎在投射、打电话、AsQueryable 等。

如果orderList.ItemsList (Of Order) 那么你为什么要投射它?如果不是,那么您可能根本不需要进行任何强制转换。

【讨论】:

  • 我试过了,但我收到一条消息:BC30456:“ToList”不是“System.Linq.IQueryable”的成员。我在我的代码的旧版本中转换它,抱歉,我在实际编码时更新了该行。
  • ToListIEnumerable 上的扩展方法,IQueryable 实现了该方法。我通常认为您没有导入 Linq 命名空间,但由于其他 Linq 方法似乎有效,我不确定问题是什么。
  • ToList 需要IQueryable(Of Order) 才能生成List(Of Order)
  • @JonHanna 或IEnumerable(Of Order)。目前尚不清楚(由于AsQueryable 调用)来源是IQueryable 还是IEnumerable
猜你喜欢
  • 2020-05-24
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 2012-11-15
  • 2011-04-19
  • 1970-01-01
相关资源
最近更新 更多