我很困惑为我的变量定义哪种数据类型,它存储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
的数据答案 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
)来扩展该查询,并且在您实际强制枚举或选择查询之前,查询仍然不会执行使用上述方法之一或类似方法得到的结果。