ObjectQuery - 它是什么,如何访问它?

ObjectQuery - what is it, how to get to it?

我正在阅读 Linq to Entities

ObjectQuery<T> 在这些文档中占据显着位置,但我不太明白它是什么。根据我的阅读,它是一个代表查询的对象。我一直认为,当我编写 Linq 查询时,我会从中得到一个 IQueryable,因此我可以 a) 进一步组合它或 b) 枚举它以便从数据库中获取数据。

  1. ObjectQueryIQueryable 有何不同?
  2. 文章中提到的'command tree query'是什么?它与表达式树有何不同
  3. 我可以从我编写 Linq 查询时得到的 IQueryable 得到 ObjectQuery 吗?

链接:

https://docs.microsoft.com/en-us/dotnet/api/system.data.objects.objectquery-1?view=netframework-4.8

它是 System.Data 的一部分,与 LINQ 不同。由于它将 SQL-String 转换为对象,如果出于某些原因您不想使用 LINQ 或 EF,它可能会很有用。 EF 中的较新版本是

context.SqlQuery("Select * from Students").ToList<Student>();

相同
new ObjectQuery<Student>("Select * from Students", context).

后面的context是Object Context,第一行是DBContext。 它们都不是强类型的,因此 'simpler' 或 Quick & Dirty。不是推荐的方式。

推荐的方法是使用 DbSet 并且根本不处理 SQL 字符串(如果可以避免的话)。