2010-07-23 5 views
0
NorthwindDataContext db = new NorthwindDataContext(); 
List<Category> lresult = (db.Categories 
     .Select(p => new { p.CategoryID, p.CategoryName, p.Description })).ToList(); 

Dans la requête ci-dessus je ne veux pas utiliser le var au lieu de var je veux utiliser la liste <> mais me montre erreur Erreur .Pourquoi se produire, Comment corriger cette requête.Linq Liste problème <>

+0

Y at-il une raison particulière pour laquelle vous ne voulez pas utiliser 'var'? C'est le cas d'utilisation parfait pour cela. –

Répondre

1

Vous créez une liste d'objets d'un type anonyme. Il n'y a aucun moyen de déclarer statiquement une liste qui accepte les objets anonymes (autre que List<object>).

La seule solution serait de spécifier un type de béton dans votre instruction Select:

List<MyType> lresult = db.Categories 
         .Select(p => new MyType() { /* assignments here */ }) 
         .ToList(); 

Je serais intéressé de savoir pourquoi vous ne voulez pas utiliser var bien. C'est en fait le cas d'utilisation parfait pour cela.

2

Votre requête sélectionne un type anonyme, pas des instances de Category. Voilà pourquoi vous allez avoir besoin soit:

  1. Utilisez var au lieu de List<>
  2. Créer un type nommé au lieu d'utiliser un type anonyme dans votre requête.

types anonymes sont indicibles - il n'y a pas de nom de type que vous pouvez les consulter dans le code. Ils existent pour faciliter la création de projections dans les requêtes LINQ sans avoir à écrire un type explicite pour chaque résultat.

Dans votre cas, il n'y a pas de réel inconvénient à utiliser simplement var. C'est pourquoi ça existe. Il vous permet de vous référer à des types anonymes sans avoir à leur donner un nom (puisque vous ne pouvez pas). Je voudrais juste utiliser:

var lresult = (db.Categories.Select(... // your query... 
+0

vous m'avez battu :). –

+0

J'apprends LINQ et ai rencontré un problème. J'ai créé une requête simple contre le db northwind, et je façonne les champs qui devraient être retournés. Le problème est après le résultat de liaison avec Aspxgridview je ne peux pas modifier l'instruction show, je ne peux pas modifier Problème de mise à jour des résultats LINQ avec anonymoustype ... lecture seule – shamim

0

Je suis assez sûr que la raison de ceci est parce que vous sélectionnez un type anonyme. Vous devez sélectionner la catégorie elle-même ou créer une autre classe qui contiendra les données.

Option 1:

NorthwindDataContext db = new NorthwindDataContext(); 
List<Category> result = (from cat in db.Categories 
         select cat).ToList(); 

Option 2:

public class NewCat 
{ 
    public int CategoryId, 
    public string CategoryName, 
    public string Description 
} 

NorthwindDataContext db = new NorthwindDataContext(); 
List<NewCat> result = (from cat in db.Categories 
         select new NewCat() 
         { 
          CategoryId = cat.CategoryID, 
          CategoryName = cat.CategoryName, 
          Description = cat.Description 
         }).ToList(); 
0

Pour le faire fonctionner avec un List<Category> vous devez dire explicitement pour sélectionner un élément de la catégorie.

Comme si

List<Category> lresult = (from p in db.Categories select new Category { 
           CategoryID = p.CategoryId, 
           CategoryName = p.CategoryName, 
           Description = p.Description }).ToList(); 
Questions connexes