如何优化这个linq函数来计算" OrePreviste"?

时间:2015-12-16 11:53:28

标签: c# linq optimization linq-to-sql sum

表格是这样的:

Table

linq中的函数是:

 public int CalcolaOreOccupate(string data)
    {
        int oreOccupate = 0;

        if (String.IsNullOrEmpty(data))
        {
            using (DatabaseDataContext contestoDB = new DatabaseDataContext())
            {
                contestoDB.ObjectTrackingEnabled = false;

                var elencoOre = (from db in contestoDB.Eventi
                                 where db.DataPrenotazione.Date == DateTime.Now.Date
                                 select db);

                foreach (var o in elencoOre)
                {
                    oreOccupate += o.OrePreviste;
                }
            }

        }
        else
        {
              /* ... othere code ... */
        }

        return oreOccupate;
    }
oreOccupate是OrePreviste的总和。我想获得更好的功能。我怎么能用linq? 感谢

1 个答案:

答案 0 :(得分:4)

只需使用Sum()扩展方法:

var nowDate = DateTime.Now.Date; 
oreOccupate = contestoDB.Eventi
           .Where(x => x.DataPrenotazione.Date == nowDate)
           .Select(x => x.OrePreviste)
           .DefaultIfEmpty(0)
           .Sum();

当你这样做时,你表明你基本上可以从数据库到你的服务器处理你的所有数据,如果你使用MS SQL,你可以像我展示的那样翻译你的查询,使用LinqToSQL在你的数据库中进行所有计算

作为注释中的@enigmativity点,因为你使用linqtosql而不需要在单独的变量中初始化DateTime.Now.Date,它将被翻译成只调用一次的sql语句。