C# 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()函数在我

我需要一个在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()函数在我的应用程序端进行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
的结果,它在枚举之前不会执行,因此它仍然只是对潜在结果的引用。