Linq输出作为接口?
时间:2020-03-06 14:43:47 来源:igfitidea点击:
这是我要尝试执行的代码:
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?)
我该如何投放才能获得所需的东西?
解决方案
尝试Cast <>()
方法:
return c.Operators.Cast<IOperator>().ToList();
编辑:其实,
返回(List <IOperator>)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(); } }
它不仅可以编译,而且可以正常工作!感谢我们朝着正确的方向前进。
使用ConvertAll <>
http://msdn.microsoft.com/en-us/library/kt456a2y.aspx
例如:在这种情况下,TEntity必须是IBusinessUnit,但是是一个类,因此我将将List <Operator>转换为List <IOperator>时遇到同样的麻烦(假设操作员实现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. }