Linq输出作为接口?

Linq输出作为接口?,linq,casting,interface,Linq,Casting,Interface,以下是我尝试执行的代码: public IList<IOperator> GetAll() { using (var c = new MyDataContext()) { return c.Operators.ToList(); } } public IList GetAll() { 使用(var c=new MyDataContext()) { 返回c.Operators.ToList(); } } 运算符实现IOpera

以下是我尝试执行的代码:

public IList<IOperator> GetAll()
{
      using (var c = new MyDataContext())
      {
          return c.Operators.ToList();
      }
}
public IList GetAll()
{
使用(var c=new MyDataContext())
{
返回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?)
无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.IList”。存在显式转换(是否缺少强制转换?)
如何转换此内容以获得所需内容?

请尝试
cast()
方法:

return c.Operators.Cast<IOperator>().ToList();
返回c.Operators.Cast().ToList();
编辑:实际上

返回(List)c.Operators.ToList()


他不会耍花招。抱歉,如果我将代码更改为以下内容:

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

           return operators.ToList();
      }
}
public IList GetAll()
{
使用(var c=new MyDataContext())
{
var运算符=(从c.运算符中的o开始)
选择o.Cast();
返回运算符。ToList();
}
}
它不仅能编译,而且还能工作!感谢您向正确的方向轻推。

使用ConvertAll

e、 g:在这种情况下,TEntity必须是一个IBusinessUnit,但它是一个类,因此我在将
列表转换为List
时遇到了同样的问题(假设操作符实现了IOperator)

在您的情况下,正如您所说,运算符不推动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.
  }
公共静态IList列表(列表项)
{
返回项目.ConvertAll(新转换器(TentityToBuisinessUnit));
}
/// 
///上面使用的List.ConvertAll()的回调。
/// 
/// 
/// 
专用静态IBusinessUnit TEntity到IBusinessUnit(TEntity te)
{
返回te;//在您的情况下,在这里执行将运算符转换为IOperator所需的任何操作。
}
List不实现List,所以不能以这种方式向上转换。