2016-04-05 3 views
0

У меня есть таблица базы данных, которые имеют структуру, как это:Как подсчитать группу записей с помощью запроса LINQ?

  • IDInteger Auto Incresement
  • Имя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 

В таблице есть два основных состояния: «отлично» и «Старение». Я хочу подсчитать, сколько записей со статусом «Выдающийся» и сколько записей со статусом «Старение» доступно в таблице.

Это пример 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

Попробуйте это:

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

+0

Awesome! Еще немного, можете ли вы добавить еще один результат подсчета всех записей в таблице? –

+0

@ Trind07 - Это будет 'MyTable.Count()'. – Enigmativity

+0

MyTable.Count() генерирует ошибку, если возвращаемое значение не является списком. Но ваш ответ правильный. –

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

предполагают улучшение :)

Смежные вопросы