C#将LINQ查询转换为SQL查询
示例
该IQueryable和IQueryable<T>接口允许开发人员翻译LINQ查询(一“语言集成”查询)到特定数据源,例如关系数据库。采取用C#编写的LINQ查询:
var query = from book in books wherebook.Author== "Stephen King" select book;
如果变量books是实现的类型,IQueryable<Book>则上面的查询IQueryable.Provider将以表达式树的形式传递到提供程序(在属性上设置),该表达式树是反映代码结构的数据结构。
提供程序可以在运行时检查表达式树以确定:
该类的Author属性有一个谓词Book;
所使用的比较方法是“等于”(==);
应该等于的值是"StephenKing"。
借助这些信息,提供程序可以在运行时将C#查询转换为SQL查询,并将该查询传递给关系数据库,以仅获取与谓词匹配的那些书:
select * from Books where Author = 'Stephen King'
在query变量(IQueryable实现IEnumerable)上迭代时,将调用提供程序。
(此示例中使用的提供程序将需要一些额外的元数据,以知道要查询哪个表,并知道如何将C#类的属性与表的列进行匹配,但是此类元数据不在IQueryable接口的范围之内。)