C# LINQ分组和计数问题

3

我有以下查询,将一堆打印机分组,然后计算它们的停机时间。我想知道每个组中有多少台打印机。我不确定是需要运行两个查询还是可以在一个查询中完成。

查询:

var records = (from r in SharePoint.Records
    group r by new
    {
        Printer = getValue(r.Values["ows_printer_id_x003a_Device"]),
    } into g
    select new
    {
        Printers = g.Key.Printer,
        CurrentHours = g.Sum(x => getDownTime(x.Values["ows_Downtime"])),
        //  Total = g.Count()
        //CTDHours = g.Sum(x => x.Field<int>("CurrentHours") + x.Field<int>("CTDHours"))
    });

可能将其添加到新的“count = g.Sum(x=>1);”中。 - No Idea For Name
你尝试过取消注释总行吗?Count不起作用吗? - Shriike
Total = g.Count() 这段代码有什么问题,它应该可以工作的。 - Ben Robinson
我不明白。每个组只有一个打印机(它是关键)。你想如何计算它们? - Asad Saeeduddin
1
@Mike 嗯,是的,因为每个组只有一台打印机。您想按什么共同属性将打印机分组? - Asad Saeeduddin
显示剩余7条评论
1个回答

0
var records = (from r in SharePoint.Records
    group r by new
    {
        Printer = getValue(r.Values["ows_printer_id_x003a_Device"]),
    } into g
    select new
    {
        Printers = g.Key.Printer,
        CurrentHours = g.Sum(x => getDownTime(x.Values["ows_Downtime"])),
        Total = g.Count()
    });

Total = g.Count 应该可以工作。

我很好奇你在这里为什么要使用getValue(),我觉得那可能是你的问题所在。 Printer = r.ows_printer_id_x003a_Device 不行吗? 你已经验证了“ows_printer_id_x003a_Device”成员中的数据,并且查询的这部分能产生你想要的分组吗?试着使用LinqPad来一步步分解它。


是的,它确实可以,但我使用打印机来显示打印机名称。getValue(自定义方法)存在是因为SharePoint在数据字段中添加了额外的内容。我不知道为什么会这样,但它确实会这样做,getvalues只是清理它并将真实值返回给我。 - Mike
啊,我明白了;我习惯于使用Linq to Entities(对于MS SQL),因此这样的小把戏是不被允许的。在那种环境中,您只能使用可转换为T-SQL的函数,因为整个查询都是解释并发送到数据库服务器的。 - pseudocoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接