这个LINQ查询什么时候进入数据库?

时间:2011-10-29 21:39:30

标签: c# sql linq select ado.net

我担心这个LINQ调用实际上会两次访问数据库(一次用于Contains,一次用于ToList),而我真正想要的只是嵌套select语句的SQL等价物:

var query1 = from y in e.cities where y.zip=12345 select y.Id;
var query2 = from x in e.users where query1.Contains(x.cityId) select x;
List<users> result = query2.ToList();

重点:如果这是两次数据库之旅,我该如何避免?我怎样才能有这样的嵌套select语句,它只能作为一次查询执行一次? Query1将只返回1或0行。必须有比使用“包含”更好的方法。

1 个答案:

答案 0 :(得分:4)

由于query1query2都是IQueryable,因此只有一次访问数据库 - 当您致电query2.ToList()

您可以使用联接来组合查询,因为您正在查找相关信息,并且关系是用户的城市ID与您要限制的城市相同:

var result = (from x in e.users 
                join y in e.cities
                on x.cityId equals y.Id
                where y.zip == 12345
                select x.Id).ToList();

上面应该为您提供一个用户ID列表(可能)存在于邮政编码12345中。