繁体   English   中英

linq2db select 和自动映射器

[英]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 ' 接口。

IQueryable 扩展

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM