C# 在什么情况下,我们必须在linq查询中使用扩展方法作为AsEnumerable()和ToList()
这里我们使用的是AsEnumerable()扩展方法C# 在什么情况下,我们必须在linq查询中使用扩展方法作为AsEnumerable()和ToList(),c#,linq-to-sql,C#,Linq To Sql,这里我们使用的是AsEnumerable()扩展方法 IEnumerable<string> strings = grdLookupPracticeMultiple.GridView.GetSelectedFieldValues("ID").Select(s => (string)s).AsEnumerable(); IEnumerable strings=grdlookuppractionmultiple.GridView.GetSelectedFieldValues(“I
IEnumerable<string> strings = grdLookupPracticeMultiple.GridView.GetSelectedFieldValues("ID").Select(s => (string)s).AsEnumerable();
IEnumerable strings=grdlookuppractionmultiple.GridView.GetSelectedFieldValues(“ID”).Select(s=>(string)s.AsEnumerable();
这里的(string)s
意思是(string)s
在上下文中只是说“将变量s
转换为类型string
”——我猜GetSelectedFieldValues(“ID”)
返回对象,您需要一个字符串的序列。实际上有一个.Cast()
可以帮你完成这项工作
至于何时需要aseneumerable()
——实际上很少——在这种情况下可能不会。关键的情况是,如果不是这样的话,情况就不一样了。也许您明确希望将IQueryable
视为IEnumerable
(强制LINQ到对象,而不是查询组合)。或者,您可能正在处理类似于数据集
的问题,其中行
等实际上不是任何t
的IEnumerable,需要帮助
至于何时使用.ToList()
:当您想要创建数据的快照时。目前,strings
是数据上的延迟执行序列。它将在您对其进行foreach
操作时执行。因此:如果列表从现在到那时发生更改:您将获得更新的内容。通常,您希望数据保持现在的状态
编辑:实际上,在本例中,GetSelectedFieldValues
返回一个快照,因此:在本例中,它实际上不会更新,但在许多其他情况下:它可能会更新;所以:这是需要考虑的
总之,你可能只想:
var strings = grdLookupPracticeMultiple.GridView.GetSelectedFieldValues("ID")
.Cast<string>().ToList();
var strings = grdLookupPracticeMultiple.GridView.GetSelectedFieldValues("ID")
.ConvertAll(s => (string)s);