【发布时间】:2017-03-13 10:07:20
【问题描述】:
我需要在一个带有 linq 的表中选择 2 个城市:
解决方案 1:只有一个查询
var CityQuery = db.Cities.Where(c => c.CityId == City1Id || c.CityId == City2Id).Take(2)
foreach (var item in CityQuery)
{
if (item.CityId == City1Id)
{
City1Name = item.CityName;
}
else
{
City2Name = item.CityName;
}
}
或
解决方案 2:执行 2 个查询
var City1Query = db.Cities.Where(c => c.CityId == City1Id).FirsOrDefault();
City1Name = City1Query.CityName;
var City2Query = db.Cities.Where(c => c.CityId == City2Id).FirsOrDefault();
City2Name = City2Query.CityName;
哪个查询最有效?最佳做法是什么?
【问题讨论】:
-
如果你想要最快的,你可以使用秒表来检查执行时间:)
-
第二个需要两次往返数据库,几乎可以肯定,这会比第一个慢。但是,这里有很多因素在起作用(索引与全表扫描等),因此唯一确定的方法是测量。还;对于其他一系列因素,这可能会因具体情况而有很大差异。
-
第一个是否会“扫描”所有数据库以尝试找到所有可能的结果?
-
优于秒表,可以使用 BenchmarkDotnet:github.com/dotnet/BenchmarkDotNet。我认为 RobIII 也是如此。
-
奇怪的是,“FirstOrDefault”在缺少“t”时会变成蓝色
标签: c# sql-server performance linq