Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 实体集查询_Sql_Linq_Entityset - Fatal编程技术网

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是一种更干净、更安全、更健壮、更易于维护的代码。一切都是一种权衡

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