C# .NET IQueryable MSSQL和ASP.NET WebAPI

C# .NET IQueryable MSSQL和ASP.NET WebAPI,c#,.net,sql-server,wpf,asp.net-web-api,C#,.net,Sql Server,Wpf,Asp.net Web Api,案件如下 WPF应用程序中有一个DataGrid,它使用IQueryable作为ItemsSource应用过滤、排序、分组、聚合等。。。我们有MSSQL服务器数据库,如果我们使用EF DbSet或ADO.NET表直接从应用程序连接到数据库,则数据将存储在该数据库中,一切工作都非常出色。我们不希望该应用程序直接访问数据库,目的是在它们之间使用WebAPI。DataGrid有自己的查询生成器表达式,生成的查询如下 .Call System.Linq.Queryable.Select( .Call S

案件如下

WPF应用程序中有一个DataGrid,它使用IQueryable作为ItemsSource应用过滤、排序、分组、聚合等。。。我们有MSSQL服务器数据库,如果我们使用EF DbSet或ADO.NET表直接从应用程序连接到数据库,则数据将存储在该数据库中,一切工作都非常出色。我们不希望该应用程序直接访问数据库,目的是在它们之间使用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不适合我们的情况。我们试图做的是在provider Execute方法中创建定制的IQueryable和IQueryProvider get查询表达式,将其发送到WebAPI,然后WebAPI在DB上执行,返回结果并从provider Execute方法返回结果

1这种方法正确/可行吗


2对于这种情况,是否有一些现有的解决方案?

也许我没有正确理解您可能会问的所有问题,但我会尝试回答

如果您使用WPF直接与SQL Server对话,它将通过驱动程序使用特殊协议。有很多文章公开了SQL Server savely,因为也可能有MS Azure托管的SQL Server等。这只是出于您可能会考虑返回SQL Server的情况

如果要通过WebAPI实现后端,您需要确保实现查询应用程序中所需信息所需的所有后端路由。 OData是http之上的某种查询语言协议。因此,它实现了您需要使用WebApi自行重建的所有查询语法

然而,如果看不到您的任何代码,就很难发现任何错误。 但是这是一个如何通过http客户端库查询web服务并在wpf datagrid中显示信息的教程。在这里包含代码可能需要很长时间,而且谷歌很容易找到它

在一个更严肃的应用程序中,你要考虑有一些抽象和层次,但是在一天结束的时候,你通过HTTP客户机访问你的WebAPI,并解析JSON到对象并绑定它。IQueError不是免费的,需要实现,除非您考虑使用ODATA。我将更容易实现应用程序所需的东西,并显式地公开这些路由

不知道这是否符合你的要求,但它可能有助于重新思考这个概念。 如果我弄错了,请考虑更新你的问题,更精确。
HTH

我找到了解决问题的方法