Выход Linq как интерфейс? - PullRequest
       11

Выход Linq как интерфейс?

4 голосов
/ 25 сентября 2008

Вот код, который я пытаюсь сделать:

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

Оператор реализует IOperator, но я получаю следующую ошибку компиляции:

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

Как я могу разыграть это, чтобы получить то, что мне нужно?

Ответы [ 4 ]

6 голосов
/ 25 сентября 2008

Попробуйте метод Cast<>():

return c.Operators.Cast<IOperator>().ToList();
4 голосов
/ 25 сентября 2008

Если я изменю код на следующий:

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

           return operators.ToList();
      }
}

он не только компилируется, но и фактически работает! Спасибо за подталкивания в правильном направлении.

0 голосов
/ 15 января 2010

Использовать ConvertAll <>

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

Например: в этом случае TEntity должен быть IBusinessUnit, но является классом, поэтому у меня такая же проблема с преобразованием List<Operator> to List<IOperator> (при условии, что Operator реализует IOperator).

В вашем случае, как вы сказали, Operator не препятствует IOperator, но это не имеет значения - это все равно будет работать -

 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.
  }
0 голосов
/ 25 сентября 2008

Редактировать: На самом деле,

return (Список ) c.Operators.ToList ();

будет не сделать трюк. К сожалению

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...