Noob в linq, выбирая первую запись каждой записи с тем же значением - PullRequest
4 голосов
/ 01 мая 2009

Я изо всех сил стараюсь выучить LINQ, но мне все еще трудно его кодировать. Например, предположим, что у меня есть набор данных или список, а имена или поля объекта коллекции являются именами столбцов.

Id | Дата | Пн | Вт | Ср | Чт | Пт | сб | вс | граф

1 | 01/05 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 0 = | = 0 == | == 5 <- (1) </p>

2 | 02/02 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 0 = | = 0 == | == 5 ** | - (2)

3 | 03/02 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 0 = | = 0 == | == 5 ** | - (2)

4 | 04/06 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 1 = | = 1 == | == 7 <- (1) </p>

5 | 05/04 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 1 = | = 1 == | == 7 ** | - (3)

6 | 06/01 | = 1 = | == 1 == | == 1 = | == 1 = | 1 = | = 1 = | = 1 == | == 7 ** | - (3)

7 | 07/06 | = 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | == 4 <---- (1) </p>

8 | 08/03 | = 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | == 4 ** | - (4)

9 | 09/07 | = 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | == 4 ** | - (4)

10 | 10/05 | 1 = | == 1 == | == 1 = | == 1 = | 0 = | = 0 = | = 0 == | == 4 ** | - (4)

Все, что я хочу, это сначала получить все числа (1), а затем (2), потому что они принадлежат первому (1). Далее группа (3), потому что они принадлежат ко второму (1). Последняя группа (4), потому что они принадлежат последней (1).

пожалуйста, помогите.

- вопрос перефразирован. 1. как я могу получить первую группу из 5, затем группу из 7 и, наконец, группу из 4?

1 Ответ

5 голосов
/ 01 мая 2009

Похоже, вы хотите заказать по количеству.

Когда вы говорите «получите первую группу из 5», что вы имеете в виду - какие данные вы хотите получить?

ОБНОВЛЕНИЕ после уточнения

Предполагая

public class Row
{
    public int ID{get;set;}
    public string Date{get;set;}
    public int Count{get;set;}
}

Row r1 = new Row{ID=1, Date="01/01/01", Count=5};
Row r2 = new Row{ID=2, Date="01/02/01", Count=5};
Row r3 = new Row{ID=3, Date="01/03/01", Count=5};
Row r4 = new Row{ID=4, Date="01/04/01", Count=7};
Row r5 = new Row{ID=5, Date="01/05/01", Count=7};
Row r6 = new Row{ID=6, Date="01/06/01", Count=7};
Row r7 = new Row{ID=7, Date="01/07/01", Count=4};
Row r8 = new Row{ID=8, Date="01/08/01", Count=4};
Row r9 = new Row{ID=9, Date="01/09/01", Count=4};
Row r10 = new Row{ID=10, Date="01/01/01", Count=4};

List<Row> rows = new List<Row>{r1,r2,r3,r4,r5,r6,r7,r8,r9,r10};

Тогда

// We will assign results of our query to this variable
var result = 

// rows is a generic list of Row objects
rows                  

   // This splits the list into seperate categories organised by Count
   // After the GroupBy, we have an IEnumerable<IGrouping<Int32, Row>> - that is, a collection of collections of items sharing a common key (in this case Count)
   .GroupBy(r=>r.Count)  // r is of type Row

    // Now we are simply selecting the first item of each subgroup.
   .Select(g=>g.First()) // g is IGrouping<Int32,Row>, g.First() is of type Row
   ;

Придает

   ID    Date        Count
    1    01/01/01    5
    4    01/04/01    7
    7    01/07/01    4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...