LINQ选择第(LINQ Select First)

2019-07-28 23:51发布

您好我有LINQ这段代码

var fp = lnq.attaches.First(a => a.sysid == sysid).name;

当异型它生成以下的T-SQL

SELECT TOP (1) [t0].[sysid], [t0].[name], [t0].[att_size], [t0].[cid], [t0].[flags], [t0].[contents] 
FROM [lntmuser].[attach] AS [t0]

我看它的样子,它返回像一个SELECT *,这将导致查询执行表扫描而不是使用索引。 坏的性能。

我怎么能只选择名称列,如:

SELECT TOP (1)[t0].[name] FROM [lntmuser].[attach] AS [t0]

提前致谢


编辑:碎玻璃解决方案的配置文件作为期望

SELECT TOP (1) [t0].[name]
FROM [lntmuser].[attach] AS [t0]
WHERE [t0].[sysid] = @p0

Answer 1:

项目的name使用前财产First()

var fp = lnq.attaches.Where(a => a.sysid == sysid)
                     .Select(a => a.name)
                     .First();

您为-这不会改变使用索引虽然Where子句是负责(在你的初始查询您传递给拉姆达First() 两个查询从该索引中受益name列,第二个就是快,因为只有一列值必须兑现。



文章来源: LINQ Select First
标签: c# linq lambda