[英]linq2db select and automapper
我有这样的代码
return dbConnection.SomeLogTable
.OrderByDescending(logRecord=> logRecord.Timestamp)
.Select(dto => _mapper.Map<JournalRecord>(dto))
.Skip(offset)
.Take(pageSize)
.ToList();
我想知道这段代码如何在没有全表提取的情况下生成正确的 SQL 查询。 它显然无法将 select 转换为 SQL 因为它使用 AutoMapper 方法,那么它是如何工作的?
UPD。 查询 linq2db 日志显示的 10 项:
DECLARE @take Integer -- Int32
SET @take = 10
DECLARE @skip Integer -- Int32
SET @skip = 0
SELECT
*all fields listed
FROM
someLogTable dto
ORDER BY
dto."timestamp" DESC
LIMIT :take OFFSET :skip
在这种情况下你必须小心,一些 c# function 被映射为 sql 敞篷车,而有些则不是,当你以错误的顺序使用它时,这可能会对性能产生巨大影响。
例如:如果使用过的 function 是不可转换的,并且您比其他可转换 function 更早地使用它,那么它将占用比您预期的更多的行。
根据您的问题:如何理解什么是可转换的,什么是不可转换的?
它必须实现' IQueryable '接口。
如果不确定,可以随时在 Visual Studio 中右键单击它-> Go To Definition,你会注意到例如: Where 和 Union are sql 可转换函数,因为它们实现了 ` IQueryable ' 接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.