数据库
首页 > 数据库> > LINQ查询什么时候去数据库?

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