EntitySet查询

时间:2009-10-14 20:38:49

标签: sql linq entityset

我正在尝试运行类似于

的查询
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语句中使用这两个条件进行查询吗?

1 个答案:

答案 0 :(得分:0)

也许,也许不是。生成的SQL确实与您编写LINQ查询的方式相匹配,因此生成的SQL并不令人惊讶。如果您从“MyEntitySet”表示的实体开始,那么,生成的SQL可能会改变。

目前还不清楚您是使用LINQ to SQL还是实体框架。 LINQ to SQL确实将一对多关系表示为“实体集”,而实体框架将关系视为第一类对象,因此一对多关系是一组具有相关实体的关系对象,而不是只是一个实体集。它确实会影响生成的SQL。

另外两个想法......

如果你想对生成的SQL进行那么多的控制,你可能会对LINQ不满意。它并不总是生成最佳SQL(虽然它有时会让你感到惊讶)。另一方面,LINQ的主要优点之一是您开始编写表达数据中真实关系的代码。经典ADO.NET的缺点是您编写有关操纵SQL和处理DataSet和DataTable集合的代码。 LINQ是一种无限清晰,更安全,更强大,更易于维护的代码。一切都是权衡。

其次,随着时间的推移,查询生成可能会变得更好(特别是在实体框架中)。