2012-12-03 3 views
3

J'appelle un appel GetData qui a renvoyé un objet IQueryable. J'ai utilisé le suivant LINQ SelectMany pour filtrer et sélectionner les champs que je dois retourner un List<MyDataType> et je reçois l'erreur suivanteImpossible de convertir le type 'System.Collections.Generic.IEnumerable <AnonymousType # 1>' en 'System.Collections.Generic.List <CUSTOM DATA TYPE>

Impossible de convertir implicitement le type System.Collections.Generic.List<AnonymousType#1> à System.Collection.Generic.List<MyDataType>

Voici mon code

List<CASES> caseList = cs.GetData(foiaNumber).ToList(); 

Dictionary<int, string> NameDict = 
    caseList.ToDictionary(cases => cases.UID, cases =>  cases.NAME); 


List<MyDataType> bindingGrdList = 
    caseList.SelectMany(x => x.ListObject) 
     .Select(n => 
      new { 
        SUBMITTER_NAME = NameDict[n.UID], 
        NUMBER = n.UID, 
        DATE_SENT = n.DATE_SENT, 
        DATE_DUE = n.DATE_DUE, 
        FINAL_DETERMINATION = n.FINAL_DETERMINATION 
       }).ToList(); 

Comment réparer l'erreur AnonymousType? Merci.

Répondre

11

Remplacer

n => new { SUBMITTER_NAME = NameDict[n.UID], NUMBER = n.UID, 
    DATE_SENT = n.DATE_SENT, DATE_DUE = n.DATE_DUE, 
    FINAL_DETERMINATION = n.FINAL_DETERMINATION } 

avec

n => new MyDataType { SUBMITTER_NAME = NameDict[n.UID], NUMBER = n.UID, 
    DATE_SENT = n.DATE_SENT, DATE_DUE = n.DATE_DUE, 
    FINAL_DETERMINATION = n.FINAL_DETERMINATION } 
0

Essayez d'utiliser var à la place:

var bindingGrdList = caseList.SelectMany(x => x.ListObject).Select(n => new { SUBMITTER_NAME = NameDict[n.UID], NUMBER = n.UID, DATE_SENT = n.DATE_SENT, DATE_DUE = n.DATE_DUE, FINAL_DETERMINATION = n.FINAL_DETERMINATION }).ToList(); 

Il sera déduire le type de votre code, qui est ce que vous voulez pour les types anonymes.

+0

Cela est utile lorsque la variable est locale à la méthode, bien que la plupart du temps le résultat sera transmis à une méthode d'appelant. –

+0

La première version de sa question mentionnait uniquement le type 'List' pour le' bindingGrdList'. Il n'y avait aucune mention de 'MyDataType' à ce moment-là. Pour la question mise à jour, cela devrait être la manière dont Rawling a répondu. Je voudrais cependant noter que pour des choses comme les contrôles ASP.NET, cela peut être très utile, les données de liaison sont généralement de la forme 'object' qui swally n'importe quelle source de données' DataTable' ou 'IEnumerable'. Dans ces cas, il n'est pas nécessaire de créer des classes explicites. –

+1

Ouais je le savais et j'ai voté votre réponse :-) –

0

Vous devez changer la projection d'un type anonyme dans le MyDataType. Pour ce faire, vous devez changer la Select comme ceci:

List<MyDataType> bindingGrdList = 
    caseList.SelectMany(x => x.ListObject) 
     .Select(n => 
      new MyDataType 
       { 
        SUBMITTER_NAME = NameDict[n.UID], 
        NUMBER = n.UID, 
        DATE_SENT = n.DATE_SENT, 
        DATE_DUE = n.DATE_DUE, 
        FINAL_DETERMINATION = n.FINAL_DETERMINATION 
       }).ToList(); 

NOTE: Je suppose que ces propriétés sont les propriétés correctes pour MyDataType, et que MyDataType a un constructeur par défaut sans paramètre.

Questions connexes