sql - Linq to WCF OData 是否适合复杂查询

标签 sql linq odata wcf-data-services

目前我们正在评估我们是否应该将 WCF 数据服务用作我们应用程序的 DAL,我正在做一个 POC 以查看 WCF 数据服务是否会在我们的所有场景中崩溃。如果我有如下数据模型

DataModel

并且我想获取 ID 为 1 的人订购的所有产品 > 100 美元我将如何使用 Linq to OData 来实现,因为在与 OData 一起使用时对 Linq 运算符有很多限制。

dbContext.LineItems.Where(li => li.Order.PersonId == 1 && li.Product.Cost > 
120).Select( li => new { Product = li.Product})

上面的代码在 Sql 服务器上生成了非常模糊的 T-SQL,理想情况下我想从上到下钻取(如果使用 LINQ 查询或直接 T-SQL,则从订单到产品)连接表,但似乎总是使用 OData从底部到顶部,我感觉不太舒服,在某些情况下,当我们必须在单个查询中查询两个以上的表时,会生成非常糟糕的 sql。

在我们的应用程序中,我们期待这样的场景,我们必须在单个查询中查询(写入条件)最多 4 个表并选择一个实体。对于这类复杂查询,OData 完全正确吗?

感谢阅读一篇很长的文章。

最佳答案

在某些情况下,您会发现无法在 LinQ 中生成 Odata 查询,并不是不能查询,而是 Linq 提供程序无法执行。在项目开始时,我们很快发现自己首先编写 Odata 查询,然后尝试将其转换为 LinQ;没过多久,我们就求助于简单地使用 Odata 进行查询。

这篇文章可能会为您提供一些其他有用的信息:Disadvantages of OData?特别是有关使用 View 的链接帖子。

关于sql - Linq to WCF OData 是否适合复杂查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20648343/

相关文章:

linq - 我如何在此 Linq 查询中获取总和?

odata - 调用 FetchEntityByKey 的 Breeze/OData 确实使用过滤器(未使用 EntitySetController.GetEntityByKey)

mysql - 多列加起来超过 16

c# - 忽略 Linq.Any 中的大小写,C#

mysql - 选择与正确答案相匹配的答案

c# - 如何将表达式传递到 Entity Framework LINQ 查询 OrderBy 子句中

c# - WebAPI OData $格式到 xml

c# - Web API OData EnableLowerCamelCase

sql - 如何在 SQL 中为 MS Access 实现分页?

php - 在 sql 数据库中制作唯一列 id 的首选方法