2008-09-25 11 views
4

Hier ist der Code, den ich zu tun habe versucht:Linq-Ausgabe als Schnittstelle?

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

Operator implementiert IOperator, aber ich bin die folgenden Kompilierungsfehler erhalten:

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?) 

Wie warf ich das, was zu bekommen I brauchen?

Antwort

6

Versuchen Sie, die Cast<>() Methode:

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

Edit: Eigentlich

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

würde nicht tun den Trick. Leider

+0

Nein, das funktioniert nicht. – Panos

+0

Liste implementiert keine Liste , so dass Sie nicht auf diese Weise up-Cast können. –

+0

oh, ja, guter Punkt – Grank

4

Wenn ich den Code wie folgt ändern:

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

      return operators.ToList(); 
     } 
} 

kompiliert es nicht nur, sondern tatsächlich funktioniert! Danke für die Anstöße in die richtige Richtung.

0

Verwenden ConvertAll <>

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

z.B .: In diesem Fall muss TEntity ein IBusinessUnit sein, aber ist eine Klasse, so dass ich die gleiche Mühe der Umwandlung List<Operator> to List<IOperator> (unter der Annahme Operator implementiert IOperator).

In Ihrem Fall, wie Sie gesagt haben, Operator IOperator nicht impelement, aber das spielt keine Rolle - dies wird immer noch funktionieren -

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. 
    } 
Verwandte Themen