2010-08-16 6 views
0

Ceci est mon code:Les méthodes de membre IQueryable ne se comportent pas?

IQueryable<Car> list = new List<Car>().AsQueryable<Car>(); 

    foreach (TreeNode node in DataHierarchyTree.CheckedNodes) 
    { 
     var a = from c in ContextDB.Cars 
       where c.CarID == Int32.Parse(node.Value) 
       select c; 

     list.Union(a.ToList()); 
    } 

    CarGridView.DataSource = list; 
    CarGridView.DataBind(); 

Cela rend rien. Je l'ai parcouru avec des points d'arrêt et il itère 5 fois. Si j'inspecte la valeur a, une instruction SELECT est générée, ce qui produit beaucoup de lignes dans le jeu de résultats lorsqu'il est utilisé avec les valeurs de la liste des nœuds vérifiés. Le problème est que, quel que soit le nombre de résultats générés lors de l'exécution du code, le list est toujours vide.

Pourquoi est-ce et que dois-je faire pour obtenir la liste des voitures que je recherche?

Répondre

1

Comme toutes les méthodes LINQ, la méthode Union renvoie un nouveau IQueryable<T> contenant les résultats de l'union.
Il ne modifie pas l'instance d'origine. Par conséquent, lorsque vous écrivez list.Union(a.ToList()), vous créez un nouveau IQueryable<Car> contenant toutes les voitures, mais ne faisant rien avec.
La variable de liste ne change pas.

Vous devez attribuer la nouvelle séquence à la variable list, comme ceci:

list = list.Union(a.ToList()); 
Questions connexes