c# - 转换 linq-to-sql 的结果

标签 c# linq linq-to-sql c#-3.0

使用接口(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 将导致 CastIEnumerable 而不是 IQueryable 上进行计算,因此转换将在从 DB 返回的实际对象上完成,而不是直接在 DB 中完成。

关于c# - 转换 linq-to-sql 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3292386/

相关文章:

C#使用linq查找字符串的最大值

c# - linq to dataset 相当于 SQL LIKE 子句

c# - 对象引用未设置错误 INSIDE != null 仅当 block ?

c# - Enum.GetValues() 返回类型

c# - LeanFT C# 自动化;单击 wpf 按钮控件抛出异常

c# - RavenDB:返回属性为空值的对象

c# - 编写此 linq 查询的更好方法是什么?

c# - 如何将以下 SQL 转换为 Linq?

c# - 如何开始编写这个 Orchard 模块

c# - ASP.Net MVC : Calling a method from a view