我需要一个在 C# 应用程序中具有不同操作的 Linq
SQL 应该是:
select distinct(col1) from tableName;
我读了一些例子,知道我可以像这样写 Linq:
var myRes =
(
from a in tableName
select a.col1
).Distinct();
所以这是我的问题:
这个 linq 是否:
从MSSQL服务器获取整套 col1到myRes, 然后使用 C# distinct() 函数在我的应用程序端进行区分?
如果这样做, 我可以在服务器端区分它吗?
或者是:
只从MSSQL服务器获取distincted col1, 而在我的应用端无事可做?
非常感谢!
最佳答案
这应该执行 DISTINCT
在数据库端过滤,除非在应用过滤器之前有其他东西使查询执行。您可以通过在执行查询时运行 SQL Server Profiler 来确认这一点。
它的工作方式是使用 deferred execution .也就是说,只有在需要时,查询才会真正针对数据库运行。在此之前,它构建了所谓的 expression tree。然后根据数据源对其进行评估。所以你可以追加越来越多IQueryable<T>
该语句的扩展方法,它们都应该转化为对数据库的单个查询。
在这种情况下 (myRes
) 您传递的并不是真正的结果集,它是对将创建结果集的查询的引用。当枚举被评估为实际结果集时,查询将被构建和评估。比如当你打电话时:
-
.ToList()
-
.Single()
-
.SingleOrDefault()
-
.First()
-
.FirstOrDefault()
- 等等
基本上任何引用查询并将其转换为实际值或值集合的东西。
关于c# - Linq SQL 在服务器端或应用程序端不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18907157/