2012-02-07 2 views
0

j'ai créé une méthode dans mon modèle:Impossible de convertir implicitement le type de dynamique LINQ to SQL

public IList<Test> GetData(int IDCus){ 

var list = from j in Context.Test 
join y in this.Context.Test1 on j.ID equals y.ID 
where j.ID == IDCus 
select new { 
    Tnum = j.Ynum, 
    Level = y.Level 
}; 
    return list.ToList(); 
} 

Quand je viens en utilisant select sans new, il fonctionne normalement. Mais quand j'ai essayé d'utiliser select new dans ma requête, l'erreur: Impossible de convertir implicitement le type System.Collections.Generic.List<AnonymousType#1> en System.Collections.Generic.IList<ITEX.Models.Test>.

Des indices? Merci.

+0

erreur se parle, vous revenez IList , mais lorsque vous faites du nouveau avec select, vous créez un type anonyme qui n'est pas "Test" – Flowerking

+0

Merci. mais pourriez-vous me dire, pourquoi avez-vous dit, je crée un type anonyme avec n'est pas Test? Parce que, j.Ynum est le champ que je prends de la table "Test" et y.Level prend de la table Test1. – Nothing

+1

Lorsque vous utilisez "select" comme ci-dessus, vous projetez votre résultat dans un nouveau "Type" qui a été créé de façon anonyme par le compilateur (fonctionnalité de C# 3.0). Pour spécifier le Type à ce que vous voulez retourner, vous devez utiliser - select new Test() {Tnum = j.Ynum, Niveau = y.Level}, cela vous assurera que vous retournez l'objet Test au lieu de créer un nouvel anonyme type. – Flowerking

Répondre

1

Si les deux Ynum et Level sont int vous devez d'abord vérifier que la classe Test ressemble à ceci:

public class Test 
{ 
    public int Tnum { get; set; } 
    public int Level {get;set;} 
} 

Et la requête devrait ressembler à ceci:

public IList<Test> GetData(int IDCus) 
{ 
    var list = (
       from j in Context.Test 
       join y in this.Context.Test1 
        on j.ID equals y.ID 
       where 
        j.ID == IDCus 
       select new Test() 
        { 
         Tnum = j.Ynum, 
         Level = y.Level 
        } 
      ); 
    return list.ToList(); 
} 

Si vous utilisez Test ailleurs vous pourriez avoir à créer une nouvelle classe pour cet appel, nous pouvons l'appeler Test2. Ensuite, la classe devrait ressembler à ceci:

public class Test2 
{ 
    public int Tnum { get; set; } 
    public int Level {get;set;} 
} 

Et la fonction pour obtenir l'information devrait ressembler à ceci:

public IList<Test2> GetData(int IDCus) 
{ 
    var list = (
       from j in Context.Test 
       join y in this.Context.Test1 
        on j.ID equals y.ID 
       where 
        j.ID == IDCus 
       select new Test2() 
        { 
         Tnum = j.Ynum, 
         Level = y.Level 
        } 
      ); 
    return list.ToList(); 
} 

J'espère que cela vous aidera

+0

Cela fonctionne bien. Merci. – Nothing

+0

Content de t'aider ... – Arion

Questions connexes