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/