【发布时间】:2018-09-27 20:56:37
【问题描述】:
案件如下。
在 WPF 应用程序中有 DataGrid,它使用 IQueryable 作为 ItemsSource(应用过滤、排序、分组、聚合等)我们有 MSSQL Server DB,如果我们使用 EF 从应用程序直接连接到 DB,则数据存储在其中DbSet 或 ADO.NET Table 一切都很好。我们不希望该应用程序直接访问数据库,目的是在它们之间使用 WebAPI。 DataGrid 有自己的查询生成器表达式,生成的查询看起来像
.Call System.Linq.Queryable.Select(
.Call System.Linq.Queryable.GroupBy(
.Call System.Linq.Queryable.Select(
.Constant<Reports.ReportQuery>(Query(RepoService.Flight)),
'(.Lambda #Lambda1<System.Func`2[RepoService.Flight,DynamicClass1]>)),
'(.Lambda #Lambda2<System.Func`2[DynamicClass1,DynamicClass2]>)),
'(.Lambda #Lambda3<System.Func`2[System.Linq.IGrouping`2[DynamicClass2,DynamicClass1],Telerik.Pivot.Core.PivotResultItem]>))
据我了解,OData 不适合我们的情况。我们要做的是在提供者 Execute 方法中创建我们的自定义 IQueryable 和 IQueryProvider 获取查询表达式,以将其发送到 WebAPI,然后在 DB 上执行它,发回结果并从提供者 Execute 方法返回该结果。
1) 这种方式正确/可能吗?
2) 针对这种情况有一些现有的解决方案吗?
【问题讨论】:
标签: c# .net sql-server wpf asp.net-web-api