我正在尝试运行一个类似于
var results = MyItem.MyEntitySet.Where( x => x.PropertyB == 0 )MyEntitySet与MyItem有一个关联,即PropertyA。
理想情况下,底层SQL查询应该是
SELECT .. FROM .. WHERE ([t0].[PropertyA] = @p0) AND ([t0].[PropertyB ] = @p1)因为PropertyA和PropertyB是我要查询的表的两个主键。
但我的跟踪似乎表明,程序首先使用PropertyA查询返回MyEntitySet,然后使用PropertyB查询返回var results。
有没有什么办法可以强制Linq在一条SQL语句中使用这两个条件进行查询?
发布于 2009-10-14 20:56:19
可能会,也可能不会。生成的SQL确实与编写LINQ查询的方式相匹配,因此生成的SQL并不令人惊讶。如果从"MyEntitySet“表示的实体开始,那么生成的SQL可能会发生变化。
目前还不清楚你使用的是LINQ to SQL还是Entity Framework。LINQ to SQL确实将一对多关系表示为“实体集”,而实体框架将关系视为一级对象,因此一对多关系是一组具有相关实体的关系对象,而不是简单的实体集。它确实会影响生成的SQL。
另外两个想法..。
如果您想要对生成的SQL进行如此多的控制,那么您可能对LINQ不满意。它并不总是生成最优的SQL (尽管它有时会让您感到惊讶)。另一方面,LINQ的主要好处之一是您可以开始编写代码来表达数据中的真实关系。传统ADO.NET的缺点在于,您编写了关于操作SQL以及处理DataSet和DataTable集合的代码。LINQ是非常干净、更安全、更健壮、更易于维护的代码。每件事都是一种权衡。
其次,查询生成可能会随着时间的推移而变得更好(特别是在实体框架中)。
https://stackoverflow.com/questions/1568847
复制相似问题