2010-04-07 4 views
1

Je suis en train d'exécuter ce code:LINQ Inscrivez-vous pour Orderby seulement

ItemTaxonomy iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy 
         where itemTaxonomy.Item.ID == itemView.ID 
         orderby itemTaxonomy.Taxonomy.Name 
         select itemTaxonomy; 

Quand je compilé je reçois l'erreur:

Cannot implicitly convert type 'System.Linq.IOrderedQueryable<Website.Models.ItemTaxonomy>' to 'Website.Models.ItemTaxonomy' . An explicit conversion exists (are you missing a cast?)

Je crois que le problème est dû à orderby itemTaxonomy.Taxonomy.Name mais je suis juste en essayant de commander par le nom d'éléments Taxonomy au lieu de leurs ID. Y-a-t-il un moyen de faire ça?

Répondre

5

Non, le problème est que le résultat est une séquence alors que votre variable est un seul élément . Étant donné que vous exprimez la commande, vous devez vous attendre à plusieurs valeurs - alors que voulez-vous en faire? Options:

  • Utilisez First():

    ItemTaxonomy iTaxonomy = (from itemTaxonomy in connection.ItemTaxonomy 
              where itemTaxonomy.Item.ID == itemView.ID 
              orderby itemTaxonomy.Taxonomy.Name 
              select itemTaxonomy).First(); 
    

    Cela renverra le ItemTaxonomy avec le premier nom de tous ceux avec l'ID d'élément approprié.

  • Changer votre type de variable:

    IEnumerable<ItemTaxonomy> taxonomies = 
        from itemTaxonomy in connection.ItemTaxonomy 
        where itemTaxonomy.Item.ID == itemView.ID 
        orderby itemTaxonomy.Taxonomy.Name 
        select itemTaxonomy; 
    

    Maintenant, vous avez une séquence de taxonomies à traiter, au lieu d'un seul élément.

+0

Merci! C'était idiot de ma part. J'ai complètement manqué que je n'ai pas eu la configuration de résultats en tant que liste. –

0

La requête LINQ renvoie un ensemble (IEnumerable<T>) de ItemTaxonomy objets, que vous essayez d'affecter à une variable de type ItemTaxonomy. Vous devez changer le type de la variable en IEnumerable<ItemTaxonomy>. (Ou appelez First())

2

Vous semblez capturer une seule valeur d'une requête . Essayez:

var iTaxonomy = from itemTaxonomy in connection.ItemTaxonomy 
       where itemTaxonomy.Item.ID == itemView.ID 
       orderby itemTaxonomy.Taxonomy.Name 
       select itemTaxonomy; 

ou pour être plus explicite:

IQueryable<ItemTaxonomy> iTaxonomy = ... 

Si vous ne veulent un seul élément, utilisez ,First() ou .Single().