在LINQ中只选择一列

Ste*_*ath 23 linq select entity-framework

EntityModel定义为: Personnel具有指向Country的链接

在LinqPad中执行此代码时,我发现第一个查询中生成的SQL未优化(返回所有字段)?我在这里错过了什么或做错了什么?

查询1 LINQ

var Country = Countries.FirstOrDefault(o => o.Id == 100000581);
var personnelIds = Country.Personnels.Select(p => p.Id).ToArray();
personnelIds.Dump();
Run Code Online (Sandbox Code Playgroud)

查询1 SQL

exec sp_executesql N'SELECT [t0].[Id], [t0].[Version], [t0].[Identifier], [t0].[Name], , [t0].[UpdatedBy] FROM [Personnel] AS [t0] WHERE [t0].[Country_Id] = @p0',N'@p0 bigint',@p0=100000581
Run Code Online (Sandbox Code Playgroud)



查询2 LINQ

var Country = Countries.FirstOrDefault(o => o.Id == 100000581);
var personnelIds2 = Personnels.Where(p => p.Country == Country).Select(p => p.Id).ToArray();
personnelIds2.Dump();
Run Code Online (Sandbox Code Playgroud)

查询2 SQL

exec sp_executesql N'SELECT [t0].[Id] FROM [Personnel] AS [t0] WHERE [t0].[Country_Id] = @p0',N'@p0 bigint',@p0=100000581
Run Code Online (Sandbox Code Playgroud)


使用的数据库是SQL Express 2008.而LinqPad版本是4.43.06

AD.*_*Net 32

//var Country = Countries.FirstOrDefault(o => o.Id == 100000581);
var personnelIds = context.Personnels
    .Where(p => p.Country.Id == 100000581)
    .Select(p => p.Id)
    .ToArray();

personnelIds.Dump();
Run Code Online (Sandbox Code Playgroud)

试试这个,应该会更好.