强制转换linq-to-sql的结果
作者:互联网
使用接口时,我们通常有一个var或IQueryable,它将返回一组数据对象,然后将它们转换为接口并以List或IList的形式返回,如下所示:
var items =
from t in SomeTable
where t.condition == true
select;
return items.ToList( ).Cast<SomeInterface>( ).ToList( );
注意:
items.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上求值,因此将对从数据库返回的实际对象进行转换,而不是直接在数据库中进行转换.
标签:linq-to-sql,c-3-0,linq,c 来源: https://codeday.me/bug/20191024/1916789.html