【发布时间】:2021-02-28 06:00:14
【问题描述】:
我有一些这样的表:
CREATE TABLE names (
score INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL
);
我想从中获得一些统计数据。在 sqlite 中我可以使用 LEAD,但不在那里。我现在知道linq2db,但我不想使用它,因为它的算法。据我了解,这个包并没有在EF linq中添加LEAD模板到SQL转换,而是在自己这边执行LEAD算法(不是在数据库那边,效率更高)。如果我错了,请纠正我。
比如我要执行查询:
var lst = db.table_names.FromSqlRaw("SELECT score, LEAD(cid, 1) OVER (ORDER BY score) as next, LEAD(score, 1) OVER (ORDER BY score) - score AS diff FROM names ORDER BY diff DESC LIMIT 1");
此 SQL 表达式返回它们之间差距最大的两个分数。查询被执行并返回单行(从 lst.Count() 和调试器得知)。
结果是存在的,但我如何得到它?也许 EF 的某些功能允许合法地从自定义 SQL 形成的数据结构中获取数据?
我不想用我需要传输到代码的数据填充类结构,但从类字段的目的来看是不正确的。
也许有一些非法的方法,但比我上面给出的方法还少?
【问题讨论】:
标签: c# sql sqlite orm entity-framework-core