使用linq选择2个元素

时间:2017-03-13 10:07:21

标签: c# sql-server performance linq

我需要在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;

哪种查询效率最高?什么是最佳做法?

1 个答案:

答案 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;