数据库
首页 > 数据库> > 强制转换linq-to-sql的结果

强制转换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