表格是这样的:

c# - 我如何优化这个 linq 函数来计算  "OrePreviste"的总和?-LMLPHP

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?
谢谢

最佳答案

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

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

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

作为注释中的@enigmativity 点,不需要在单独的变量中初始化 DateTime.Now.Date,因为您使用的是 linqtosql,它将被转换为所谓的 sql 语句一次。

关于c# - 我如何优化这个 linq 函数来计算 "OrePreviste"的总和?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34311364/

10-12 20:51