2010-05-08 3 views

Répondre

6

Vous pouvez interroger des sous-types comme ceci:

var horses = from animal in ctx.AnimalSet 
       where animal is Horse 
       select animal as Horse; 

Cela ira chercher tous les objets Cheval de l'ensemble des animaux dans mon contexte examle.

Si vous souhaitez interroger sur les propriétés spécifiques sous de type que vous pouvez faire:

var horses = from animal in ctx.AnimalSet 
      where animal is Horse //edit, this line is not needed 
      let horse = animal as Horse 
      where horse.TracksWon > 3 
      select horse; 

Tout cela sera traduit en SQL, donc il n'y a pas de frais généraux comme aller chercher tous les animaux et le filtrage sur le côté client, il fonctionne Comme il se doit.

HTH

10

genre de réponse de Roger d'œuvres, mais pourrait ne pas vous donner les résultats que vous voulez. Il est généralement préférable d'utiliser OfType(). Pour utiliser ses exemples:

var horses = from animal in ctx.AnimalSet 
      where animal is Horse 
      select animal as Horse; 

Cela rend horses de type IQueryable<Animal>. Mais dans ce cas, vous voulez probablement IQueryable<Horse>, que vous pouvez obtenir par:

var horses = from animal in ctx.AnimalSet.OfType<Horse>() 
      select animal; 

... ou tout simplement:

var horses = ctx.AnimalSet.OfType<Horse>(); 

De même, la deuxième requête de Roger peut être réécrite comme:

var horses = from horse in ctx.AnimalSet.OfType<Horse>() 
      where horse.TracksWon > 3 
      select horse; 

Ce qui est plus facile à lire, mais change le type de résultat en IQueryable<Horse>.

Questions connexes