Sql 实体集查询
我正在尝试运行类似于的查询Sql 实体集查询,sql,linq,entityset,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是我正在查询的表的两个主键 但我的
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结果
我是否可以强制Linq在一条SQL语句中使用这两个条件进行查询?可能,可能不是。生成的SQL确实与您编写LINQ查询的方式相匹配,因此生成的SQL并不令人惊讶。如果从“MyEntitySet”表示的实体开始,那么生成的SQL可能会改变
现在还不清楚您使用的是LINQtoSQL还是实体框架。LINQ to SQL确实将一对多关系表示为“实体集”,而实体框架将关系视为一级对象,因此一对多关系是一组具有相关实体的关系对象,而不仅仅是一个实体集。它确实会影响生成的SQL
另外两个想法
如果您想要对生成的SQL进行如此多的控制,您可能不会对LINQ感到满意。它并不总是生成最优的SQL(尽管有时会让您感到惊讶)。另一方面,LINQ的主要好处之一是,您可以开始编写代码来表达数据中的真实关系。经典ADO.NET的缺点在于编写有关操作SQL和处理DataSet和DataTable集合的代码。LINQ是一种更干净、更安全、更健壮、更易于维护的代码。一切都是一种权衡
其次,随着时间的推移,查询生成可能会变得更好(尤其是在实体框架中)