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

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


什么是(string)s

最佳答案

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

至于何时需要AsEnumerable(),实际上很少见,在这种情况下可能不需要。关键情况是,否则就不会发生。也许您明确希望将IQueryable<T>视为IEnumerable<T>(以强制LINQ-to-Objects代替查询组合)。或者,也许您正在处理诸如DataSet之类的东西,其中.Rows等实际上对于任何IEnumerable<T>而言都不是T,需要帮助。

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

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

总结一下,您可能只想:

var strings = grdLookupPracticeMultiple.GridView.GetSelectedFieldValues("ID")
                      .Cast<string>().ToList();


但是,如果这是dev express网格,那么您已经从List<T>获得了GetSelectedFieldValues,因此也许这样会更有效:

var strings = grdLookupPracticeMultiple.GridView.GetSelectedFieldValues("ID")
                      .ConvertAll(s => (string)s);

关于c# - 在哪种情况下,我们必须在linq查询中使用扩展方法作为AsEnumerable()和ToList(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52589330/

10-14 05:25