LINQ帮助,返回集的数据类型

时间:2011-07-11 11:13:15

标签: vb.net linq type-conversion

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

目前我将其定义为某种数据类型,但其生成错误如:""Unable to cast object of type 'WhereSelectListIterator 2“”`

示例代码:

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

的数据

3 个答案:

答案 0 :(得分:1)

听起来你只想要一个单一的价值。您可能想要考虑的选项是:

e.g。

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

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

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

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

答案 1 :(得分:0)

默认情况下,条件返回IEnumerable(在您的情况下为基本费率)。获取返回列表的第一个元素或尝试使用

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

答案 2 :(得分:0)

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

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

相关问题