gpt4 book ai didi

sql-server - ASP.NET MVC 4 - 使用 Linq 一次读取数据库并多次使用

转载 作者:行者123 更新时间:2023-12-02 22:00:34 24 4
gpt4 key购买 nike

我正在使用 Linq 创建 4 个对象集合:

var Restaurants = db.Places.Where(p => p.Tags.Any(t => t.Name == "Restaurant")).ToList();
var Bars = db.Places.Where(p => p.Tags.Any(t => t.Name == "Bar")).ToList();
var Pubs = db.Places.Where(p => p.Tags.Any(t => t.Name == "Pub")).ToList();
var Hotels = db.Places.Where(p => p.Tags.Any(t => t.Name == "Hotel")).ToList();

显然最好从数据库中读取一次,上面会在 SQL Server 2012 或 1 上打开 4 个连接和 4 个查询吗?

如果我改为执行以下操作,Entity Framework 是否只会从数据库中读取一次,我自己测试它的最佳方法是什么?

var places = db.Places;
var Restaurants = places.Where(p => p.Tags.Any(t => t.Name == "Restaurant")).ToList();
var Bars = places.Where(p => p.Tags.Any(t => t.Name == "Bar")).ToList();
var Pubs = places.Where(p => p.Tags.Any(t => t.Name == "Pub")).ToList();
var Hotels = places.Where(p => p.Tags.Any(t => t.Name == "Hotel")).ToList();

这里的最佳实践是什么?有这方面的统计数据吗?

谢谢。

最佳答案

var types = new[]{"Restaurant","Bar","Pub","Hotel"};
var places = db.Places.Include(p=>p.Tags).Where(p=>p.Tags.Any(t=>types.Contains(t.Name))).ToList();

var Restaurants = places.Where(p => p.Tags.Any(t => t.Name == "Restaurant"));
var Bars = places.Where(p => p.Tags.Any(t => t.Name == "Bar"));
var Pubs = places.Where(p => p.Tags.Any(t => t.Name == "Pub"));
var Hotels = places.Where(p => p.Tags.Any(t => t.Name == "Hotel"));

应该只产生 1 个查询。虽然,您正在使用水合标记 DbSet 填充位置,这可能会显着降低查询速度。您可能会创建一个稍微不同的查询来检索地点并存储它的类型,这样您就不必拥有完全水合的标签 DbSet,但如果您认为有必要,我会把它留给您。

关于sql-server - ASP.NET MVC 4 - 使用 Linq 一次读取数据库并多次使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17006412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com