在哪种情况下,我们必须在linq查询中使用扩展方法作为AsEnumerable()和ToList()

时间:2018-10-01 10:38:26

标签: c# linq-to-sql

在这里,我们使用AsEnumerable()扩展方法。

IEnumerable<string> strings = grdLookupPracticeMultiple.GridView.GetSelectedFieldValues("ID").Select(s => (string)s).AsEnumerable();

什么是(string)s

1 个答案:

答案 0 :(得分:3)

在这种情况下,(string)s只是说“将变量s转换为类型string”-我猜想GetSelectedFieldValues("ID")返回object,并且您需要string的序列。实际上有一个.Cast<string>()会为您完成的。

关于何时需要AsEnumerable()(实际上很少见),在这种情况下可能不需要。关键场景是不会否则。也许您明确希望将IQueryable<T>视为IEnumerable<T>(以强制执行LINQ-to-Objects而不是查询组合)。或者,也许您正在处理类似DataSet的问题,其中.Rows的{​​{1}}实际上没有{em> ,并且需要帮助。

关于何时使用IEnumerable<T>:何时要创建数据快照。目前,T是数据上的延迟执行序列。当您.ToList()对其进行操作时,它将执行 。因此:如果列表在现在和之后之间发生变化:您将获得更新的内容。通常,您需要数据现在存在

edit:实际上,在这种情况下,strings 返回快照,因此:在这种情况下,它实际上不会更新 ,但在许多其他情况下:它可能;所以:需要考虑。

所以:总结一下,您可能只想要:

foreach

但是,如果这是dev express网格,那么您已经从GetSelectedFieldValues获得了var strings = grdLookupPracticeMultiple.GridView.GetSelectedFieldValues("ID") .Cast<string>().ToList(); ,那么也许这会更有效:

List<T>