LinqTo2Db
поддерживает Функции окон Lag
и Lead
:
from x in db.Events
let prev = Sql.Ext
.Lag(x.app, Sql.Nulls.None)
.Over()
.OrderBy(x.time)
.ToValue()
where (prev != x.app && prev != null)
select (prev, x.app)
Первый 8
из всех 43 поддерживаемые функции (!)
|-------------|----------------------|
| SQL | Linq2db |
|-------------|----------------------|
| AVG | Sql.Ext.Average() |
| CORR | Sql.Ext.Corr() |
| COUNT | Sql.Ext.Count() |
| COVAR_POP | Sql.Ext.CovarPop() |
| COVAR_SAMP | Sql.Ext.CovarSamp() |
| CUME_DIST | Sql.Ext.CumeDist() |
| DENSE_RANK | Sql.Ext.DenseRank() |
| FIRST_VALUE | Sql.Ext.FirstValue() |
|-------------|----------------------|
Примечание Нет ограничений в использовании оконных функций.LINQ To DB
создаст SQL
и выполнит запрос, если функция не поддерживается или какая-то часть функции ограничена, в частности Database
- ошибка будет выдана на стороне базы данных.