C# Linq SQL在服务器端还是应用程序端?
我需要一个在C#app中具有不同操作的Linq SQL应该是:C# Linq SQL在服务器端还是应用程序端?,c#,sql,linq,C#,Sql,Linq,我需要一个在C#app中具有不同操作的Linq SQL应该是: select distinct(col1) from tableName; 我读了一些e.G,知道我可以写Linq,比如: var myRes = ( from a in tableName select a.col1 ).Distinct(); 所以我的问题是: 这是不是linq: 从MSSQL服务器到myRes获取一整套col1, 然后使用C#distinct()函数在我
select distinct(col1) from tableName;
我读了一些e.G,知道我可以写Linq,比如:
var myRes =
(
from a in tableName
select a.col1
).Distinct();
所以我的问题是:
这是不是linq:
从MSSQL服务器到myRes获取一整套col1,
然后使用C#distinct()函数在我的应用程序端进行distinct
如果是这样,,
我可以在服务器端进行区分吗
或者它确实:
仅从MSSQL服务器获取distinctedcol1,
在我的应用程序端什么都不做
非常感谢 这应该是在数据库端执行
DISTINCT
过滤器,除非在应用过滤器之前有其他东西使查询执行。您可以在执行查询时运行SQL Server Profiler来确认这一点
其工作方式是使用。也就是说,在需要之前,查询实际上不会针对数据库运行。在此之前,它建立了一个称为的模型,然后根据数据源对其进行评估。因此,您可以在该语句上附加越来越多的IQueryable
扩展方法,它们都应该转换为针对数据库的单个查询
在本例中(myRes
)传递的内容实际上不是结果集,而是对将创建结果集的查询的引用。在将枚举计算到实际结果集中时,将生成并计算查询。例如当你打电话时:
.ToList()
.Single()
.SingleOrDefault()
.First()
.FirstOrDefault()
- 等等
基本上,任何引用查询并将其转换为实际值或值集合的操作。大多数ORM都会在SQL server端执行
DISTINCT
。您正在使用什么ORM?最简单的方法是使用SQL Profiler运行跟踪,执行代码,并查看发送到SQL Server的实际SQL。在运行查询时检查SQL Profiler。还可以尝试在查询内部使用distinct
inline进行不同的查询。您指的是IQueryable扩展方法。一旦您得到一个IEnumerable,您将触发sql查询。@drch:嗯,有点像。但我明白你的意思。IEnumerable
是yield return
的结果,它在枚举之前不会执行,因此它仍然只是对潜在结果的引用。