我需要在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;
哪种查询效率最高?什么是最佳做法?
答案 0 :(得分:0)
一般来说,您的解决方案1应该更快,因为它只对数据库进行一次往返。但是,这种差异是否显着取决于您的使用案例。
这是一个替代解决方案,只从数据库中带回城市名称(与带回所有列)。初看起来,这可能看起来像是效率低下的笛卡尔积,但数据库引擎很可能会对此进行优化,尤其是CityId
列上存在索引时。
var result = from city1 in CityQuery where city1.CityId == City1Id
from city2 in CityQuery where city2.CityId == City2Id
select new
{
City1Name = c1.CityName,
City2Name = c2.CityName
};
City1Name = result.City1Name;
City2Name = result.City2Name;