c# - linq to sql where子句和计数

标签 c# linq-to-sql

我有一个 linq-to-sql 查询,用于填充一个以整数作为属性且其功能是保存计数的对象。

查询看起来像这样(现在)

var TheQuery = from.....
               where ....
               in thefilteredresults
               select new MyModel()
               {
                   Total = thefilteredresults.Count(),

                   TotalTime = (from x in thefilteredresults
                                where x.Outcome == 4).Sum(t => t)
               }.Single();

我在先过滤然后根据初始 where 子句的过滤结果进行计数时遇到了一些问题。 我需要修改什么?

谢谢。

最佳答案

你们可以一起破解:

(from x in table
where filter(x)
group x by 0 into g
select new { Count = (int?)g.Count() ?? 0, Sum = (int?)g.Sum(x => x.Value) ?? 0 }).Single()

SQL Server 将优化掉不需要的分组。最好记录下你为什么这样写。

编辑:我在 int? 中添加了一个看起来很奇怪的类型转换。这样做的原因是告诉 Linq to SQL 假设该值可以为空,并使用 COALELCE 函数调用将 NULL 转换为 0。这也是一个应该记录在案的 hack。

关于c# - linq to sql where子句和计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9201810/

相关文章:

C# Automapper IQueryable - LINQ 2 SQLite - 查询仅返回父项,嵌套子项始终为 null

c# - 使用 linq to SQL 更新特定列

c# - 获取日期时间列差异的平均值?

javascript - 当模态类处于事件状态时,Google map 会消失

c# - 使用 FtpWebRequest 重命名文件

c# - 如何在自定义 wpf 控件上绑定(bind)数据网格列的可见性?

c# - 为什么此 LINQ 表达式返回只有一项的子列表

c# - Entity Framework Core 中表达式树的参数化查询

c# - 为 Graphics.Draw 添加透明度

c# - 创建可读的 FxCop 报告