虽然有必要从一个 LINQ 驱动程序切换到另一个(例如,因为第一个可能不支持某些想要的表达式)应该使用什么样的开关 -AsEnumerable
或ToList
?
var r = ent.Users.Select(user => new
{
user.Name,
Organs = user.Attributes.Select(x => x.Organ)
})
.AsEnumerable() // switch to LINQ to Objects
.Select(user => new
{
user.Name,
Organs = string.Join(", ", user.Organs)
});
我知道这AsEnumerable
是延迟的,所以它不会立即枚举源,但是ToList
在实践中,与这里的开关使用有什么显着区别吗?
要在此处运行 LINQ to Objects,来自 SQL 的数据应该已经可用 - 因此,ToList()
如果使用它来代替开关,它将执行此操作。在评估表达式树时,无论如何都不会在内部调用AsEnumerable
force的使用吗?ToList