首页 > 解决方案 > 将其他 LINQ 表达式添加到 ServiceStack.OrmLite 中的 SELECT 查询

问题描述

我在 Blazor WebAssembly 应用程序中使用 Telerik Blazor Grid 组件,并希望能够使用Telerik.DataSource.DataSourceRequest封装了所有网格状态的对象(例如,当前应用的列过滤器、排序和页码等)。

它们有一个扩展方法.ToDataSourceResult(dataSourceRequest),可以与,和..ToDataSourceResultAsync(dataSourceRequest)之类的集合一起使用。您可以使用来自其他服务(例如实体框架)的集合来执行优化查询 - Telerik 方法在内部使用 LINQ 表达式,以便框架可以以最有效的方式解析它们。List<T>IEnumerable<T>IQueryable<T>IQueryable

我有这个示例代码:

DataSourceResult processedData = null;

using (var db = _dbConnectionFactory.Open())
{
    Telerik.DataSource.DataSourceRequest gridRequest = dataSourceRequestWrapper.ToDataSourceRequest();

    var q = db.From<PersonTable>()
                .Skip(0)
                .Take(1000);

    processedData = await db.Select(q).AsQueryable().ToDataSourceResultAsync(gridRequest);

    db.Close();
}

return processedData;

似乎db.Select(q)将数据库中的数据具体化,然后.ToDataSourceResultAsync(gridRequest)在内存中应用扩展方法中的 LINQ 表达式,而不是获取 ServiceStack.OrmLite 框架来生成完整的 SQL 查询,包括来自网格状态对象WHEREORDER BY子句。

是否有可能让 ServiceStack.OrmLite 表现得更像实体框架,它使用其扩展方法中的 LINQ 查询IQueryable 来生成成功的 SQL 查询。

请参阅我在 Telerik Blazor Grid 论坛上写的相关帖子:https ://www.telerik.com/forums/can-datasourcerequest-be-used-in-sql-query-to-add-where-and-order-by-条款

标签: sql-serverormlite-servicestack

解决方案


推荐阅读