LINQ查询什么时候去数据库?
作者:互联网
我担心,当我真正想要的只是嵌套选择语句的SQL等效项时,此LINQ调用实际上会两次访问数据库(一次是Contains,一次是ToList):
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();
重点是:如果这是两次访问数据库,该如何避免呢?我如何拥有这样的嵌套选择语句,该语句仅一次执行一次查询? Query1只会返回1或0行.必须有比使用“包含”更好的方法.
解决方法:
由于query1和query2都是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();
上面应该为您提供(大概)居住在邮政编码12345中的用户的用户ID列表.
标签:ado-net,select,linq,sql,c 来源: https://codeday.me/bug/20191102/1988493.html