2009-06-17 5 views
2

je le code suivant:LINQ to SQL Liste de table à l'interface Liste

public IQueryable<ITax> FindAllTaxes() 
{ 
     return db.Taxes; 
} 

Je reçois l'erreur suivante

Cannot implicitly convert type 'System.Data.Linq.Table<Models.Tax>' to 'System.Linq.IQueryable<Interfaces.ITax>' 

Je suis en train d'utiliser l'interface où je vais, mais pas sûr comment convertir cela, toute aide?

+0

Pour info - dans l'éditeur de stackoverflow; Si vous indentez le code bloque 4 espaces (ou cliquez sur l'icône de code), il s'affichera correctement, y compris l'important < > qui s'échappe. –

Répondre

4

Nous n'avons pas covariance des types génériques encore, j'ai peur. Vous pouvez faire IQueryable<Tax>, mais pas IQueryable<ITax>. Vous pourriez introduire une conversion, mais cela va probablement casser la composabilité, la rendant inutile. Vous pouvez l'essayer si:

return db.Taxes.Cast<ITax>(); 

En C# 4.0, cela marcherait probablement sans le casting supplémentaire (même si je ne l'ai pas essayé).

+0

Incroyable comment un peu de mise en forme peut changer le sens d'une question. Je me demandais pourquoi IQueryable (non générique) ne fonctionnerait pas et voilà, c'était vraiment un générique de l'interface qu'il recherchait. – tvanfosson

+0

J'ai eu le même - j'ai commencé à écrire une réponse sur la façon dont Table : IQueryable : IQueryable, puis pensé "Je me demande ..." ;-p –

0

essayer cette

 public IQueryable<Taxe> FindAllTaxes() { return db.Taxes; } 

ou

 public IQueryable<Tax> FindAllTaxes() { return db.Taxes; }