2008-09-25 5 views
4

Voici le code que j'essaie de faire:Sortie Linq en tant qu'interface?

public IList<IOperator> GetAll() 
{ 
     using (var c = new MyDataContext()) 
     { 
      return c.Operators.ToList(); 
     } 
} 

opérateur implémente IOperator, mais je me fais l'erreur de compilation suivante:

Cannot implicitly convert type 'System.Collections.Generic.List<MyProject.Core.Operator>' to 'System.Collections.Generic.IList<MyProject.Core.Model.IOperator>'. An explicit conversion exists (are you missing a cast?) 

Comment puis-je lancer ce pour obtenir ce que je avoir besoin?

Répondre

6

Essayez la méthode Cast<>():

return c.Operators.Cast<IOperator>().ToList(); 
0

Edit: En fait,

retour (Liste < IOperator>) c.Operators.ToList();

serait pas faire l'affaire. Désolé

+0

Non, cela ne fonctionne pas. – Panos

+0

La liste n'implémente pas la liste , de sorte que vous ne pouvez pas effectuer de conversion de cette manière. –

+0

oh, ouais, bon point – Grank

4

Si je change le code à ce qui suit:

public IList<IOperator> GetAll() 
{ 
     using (var c = new MyDataContext()) 
     { 
      var operators = (from o in c.Operators 
          select o).Cast<IOperator>(); 

      return operators.ToList(); 
     } 
} 

compile non seulement, mais fonctionne réellement! Merci pour les nudges dans la bonne direction.

0

Utilisez ConvertAll <>

http://msdn.microsoft.com/en-us/library/kt456a2y.aspx

par exemple .: Dans ce cas, TEntity doit être un IBusinessUnit, mais il est une classe, donc j'ai le même problème de conversion List<Operator> to List<IOperator> (en supposant l'opérateur met en œuvre IOperator).

Dans votre cas, comme vous l'avez dit, l'opérateur n'impelement pas IOperator, mais cela n'a pas d'importance - cela fonctionne toujours -

public static IList<IBusinessUnit> toIBusinessUnitIList(List<TEntity> items) 
     { 

     return items.ConvertAll<IBusinessUnit>(new Converter<TEntity, IBusinessUnit>(TEntityToIBuisinessUnit)); 
     } 

    /// <summary> 
    /// Callback for List<>.ConvertAll() used above. 
    /// </summary> 
    /// <param name="md"></param> 
    /// <returns></returns> 
    private static IBusinessUnit TEntityToIBuisinessUnit(TEntity te) 
    { 
    return te; // In your case, do whatever magic you need to do to convert an Operator to an IOperator here. 
    } 
Questions connexes