linq返回整个数据源还是仅返回指定的select列?

时间:2019-03-21 06:49:45

标签: c# .net linq-to-sql

给出如下查询:

var myThingy =>
         (from rg in _repository.GetQueryable<TheThing>()
          where rg.Id == someId
          select rg);

var myThingysId =>
         (from rg in _repository.GetQueryable<TheThing>()
          where rg.Id == someId
          select rg.Id);

在第一个中,我要求完整的TheThingy,在第二个中,仅要求其ID。

我想知道的是它们都将产生相同的SQL查询吗?

2 个答案:

答案 0 :(得分:3)

Linq在第一种情况下返回整个数据源(所有列)-

Linq代码:

from t in Persons select t

生成的SQL:

 SELECT [t0].[PersonID], [t0].[FirstName], [t0].[LastName] FROM [Person] AS [t0]

仅在第二种情况下返回指定的列-

Linq代码:

from t in Persons select new {t.PersonID}

生成的SQL:

SELECT [t0].[PersonID] FROM [Person] AS [t0]

答案 1 :(得分:3)

不。生成不同的查询。因为,试图产生性能最佳的查询。

查看它创建的所有查询。简单的例子:

var sqlQuery = ((System.Data.Entity.Infrastructure.DbQuery<YouEntityType>)YouQuery).Sql;

Console.WriteLine("work query: "+sqlQuery);

我的示例屏幕截图

enter image description here