在这里,我们使用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/