Bien qu'il soit nécessaire de basculer d'un pilote LINQ à un autre (par exemple parce que certaines expressions voulues peuvent ne pas être prises en charge dans le premier), quel type de commutateur doit être utilisé - AsEnumerable
ou ToList
?LINQ to SQL dans LINQ to Objects - basculer via AsEnumerable ou via 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)
});
Je comprends que AsEnumerable
est reporté, il n'énumèrent pas la source immédiatement, mais est-il une différence significative que le passage de l'utilisation de ToList
ici, dans la pratique, au lieu?
Pour que LINQ to Objects s'exécute ici, les données de SQL doivent déjà être disponibles - c'est ce que fera ToList()
s'il est utilisé à la place du commutateur. L'utilisation de AsEnumerable
ne force-t-elle pas quelque chose comme ToList
à être invoqué en interne de toute façon pendant l'évaluation de l'arbre d'expression?
Vous devriez voir ceci: [whats-the-differences-between-tolist-asenumerable-asqueryable] (http://stackoverflow.com/questions/17968469/whats-the-differences-between-tolist-asenumerable-asqueryable) – nawfal