【问题标题】:LINQ Help, data type of returned setLINQ帮助,返回集的数据类型
【发布时间】:2011-07-11 11:13:14
【问题描述】:

我很困惑为存储 LINQ 语句返回的值的变量定义哪种数据类型。

目前我将它定义为某种数据类型,但它会生成错误,例如:""Unable to cast object of type 'WhereSelectListIterator2""`

示例代码:

Private BaseRateList = List (of BaseCat)
Private myBase As BaseCat = Nothing

'''In some other proc
myBase = From BaseRate In BaseRateList _
         Where BaseRate.UIN = 4 _
         Select BaseRate

这里我希望 myBase 保存 UIN = 4 的数据

【问题讨论】:

    标签: vb.net linq type-conversion


    【解决方案1】:

    听起来您只需要一个值。您可能要考虑的选项是:

    例如

    myBase = (From BaseRate In BaseRateList _
              Where BaseRate.UIN = 4 _
              Select BaseRate).Single()
    

    ...如果有 0 个或多个匹配值,取决于您希望它的行为方式。

    或者使用带有谓词的Single(等)的重载:

    myBase = BaseRateList.Single(Function(baseRate) baseRate.UIN = 4)
    

    【讨论】:

    • 是的,我确实想要单值。我按照你说的尝试过,但它说错误:“{“对象引用未设置为对象的实例。”}”
    • @KoolKabin:使用哪个选项?堆栈跟踪是什么样的?你确定这不是什么都不是 BaseRateList 吗?
    【解决方案2】:

    默认情况下,条件返回 IEnumberable(在您的情况下为 Baserates)。取返回列表的第一个元素或尝试使用

    var baseRate = BaseRateList.Single(baseRate => baseRate.UIN == 4);
    

    【讨论】:

    • 我c#很差,能不能用vb.net翻译
    【解决方案3】:

    您的 LINQ 查询表示尚未执行的表达式。现在,您的代码正试图将该查询放入一个变量中,该变量必须声明为 IQueryable(Of BaseCat)。如果您想执行查询以获得结果,您应该使用 Aggregate 而不是 From 从查询结果中挑选一些东西,或者您应该使用 ToList 或 ToArray 将结果转换为集合,或者您应该使用 First、FirstOrDefault、Single 或 SingleOrDefault 函数从执行查询中选择一个结果。

    请务必注意查询本身与执行查询的结果之间的区别。如果您将查询放入一个变量 (IQueryable) 中,您可以扩展该查询,然后对该查询执行另一个查询(例如 Dim newQuery = From itm In myBase Where itm.MyDate <= Today),并且查询仍然不会执行,直到您实际强制它枚举或选择一个结果使用上述方法之一或类似方法从中提取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 2011-08-20
      • 2022-11-23
      • 2010-12-07
      • 1970-01-01
      相关资源
      最近更新 更多