目前我们正在评估我们是否应该将 WCF 数据服务用作我们应用程序的 DAL,我正在做一个 POC 以查看 WCF 数据服务是否会在我们的所有场景中崩溃。如果我有如下数据模型
并且我想获取 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/