使用接口(interface)时,我们通常有一个 var 或 IQueryable,它们将返回一组数据对象,然后我们将这些对象转换为接口(interface)并作为 List 或 IList 返回,如下所示:
var items =
from t in SomeTable
where t.condition == true
select;
return items.ToList( ).Cast<SomeInterface>( ).ToList( );
注意: 项目.Cast( ).ToList( ) 将编译,但会在运行时抛出 InvalidCastException。
有没有更好的方法? (我将 ToList/Cast/ToList 放在扩展方法中,但这并没有什么好...)
return items.CastToList<SomeClass, SomeInterface>( );
谢谢!
最佳答案
你所做的是正确的(你不能直接在 IQueryable
上调用 Cast
),但它不是最优的,因为你正在创建 2 个列表当您真的只需要一个时。使用 AsEnumerable
而不是第一个 ToList
:
return items.AsEnumerable().Cast<SomeInterface>().ToList();
调用 AsEnumerable
将导致 Cast
在 IEnumerable
而不是 IQueryable
上进行计算,因此转换将在从 DB 返回的实际对象上完成,而不是直接在 DB 中完成。
关于c# - 转换 linq-to-sql 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3292386/