如何使用LINQ Query计算记录组?

时间:2016-04-05 04:21:00

标签: vb.net linq

我有一个数据库表,其结构如下:

  • ID 整数自动增量
  • 名称 VarChar
  • 状态 VarChar

样本记录:

ID      Name            Status
1       record 1        Outstanding
2       record 2        Outstanding
3       record 3        Aging
4       record 4        Outstanding
5       record 5        Aging
6       record 6        Outstanding

在表中,有两个主要状态:“杰出”和“老龄化”。我想计算一下状态为“Outstanding”的记录数量以及表格中有“Aging”状态的记录数量。

这是一个示例LINQ查询:

Using DC = DataClassesDataContext.Create()
        Dim dataTable = From Count(Outstanding), Count(Aging) In DC.MyTable _
                        Where item.Status = "Outstanding" OrElse item.Status = "Aging" _
                        Group By item.Status _
                        Select item
End Using

预期结果应为:

Outstanding     Aging
4               2

你能帮我设计一个LINQ来实现结果吗?

2 个答案:

答案 0 :(得分:3)

试试这个:

Dim MyTable = { _
    New With {.ID = 1, .Name = "record 1", .Status = "Outstanding"},
    New With {.ID = 2, .Name = "record 2", .Status = "Outstanding"},
    New With {.ID = 3, .Name = "record 3", .Status = "Aging"},
    New With {.ID = 4, .Name = "record 4", .Status = "Outstanding"},
    New With {.ID = 5, .Name = "record 5", .Status = "Aging"},
    New With {.ID = 6, .Name = "record 6", .Status = "Outstanding"}
}

Dim dataTable = _
    From item In MyTable
    Group By Key = item.Status Into Xs = Group
    Select New With {.Status = Key, .Count = Xs.Count()}

我得到了这个结果:

dataTable

答案 1 :(得分:0)

试试这个: -

using System;
using System.Collections.Generic;
using System.Linq;


public class Program
{
    public static void Main()
    {   
        var test = new List<Sample>();

        test.Add(new Sample{ID=1,Name="record 1",Status="Outstanding"});
        test.Add(new Sample{ID=2,Name="record 2",Status="Outstanding"});
        test.Add(new Sample{ID=3,Name="record 3",Status="Aging"});
        test.Add(new Sample{ID=4,Name="record 4",Status="Outstanding"});
        test.Add(new Sample{ID=5,Name="record 5",Status="Outstanding"});
        test.Add(new Sample{ID=6,Name="record 6",Status="Aging"});


        var result = from row in  test
                            group row by "Count" into g
                            where g.FirstOrDefault() != null
                            select new
                    {
                            //Status = g.Key,
                            Outstanding = g.Where(C => C.Status == "Outstanding").Count(),
                            Aging = g.Where(C => C.Status == "Aging").Count()
                    };

        Console.WriteLine("Outstanding"+"   "+"Aging");
        foreach(var item in result)
        {
            Console.WriteLine(" "+item.Outstanding+"            "+item.Aging);
        }

    }   
}

public class Sample
{
    public int ID {get;set;}
    public string Name {get;set;}
    public string Status {get; set;}
}

结果: -

enter image description here

您可以使用以下链接 - https://dotnetfiddle.net/xC2NXm

运行上面的示例代码

建议改进:)