Noob в linq, выбирая первую запись каждой записи с одинаковым значением

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

Идентификатор | Дата |Пн |Вт |Ср |Чт |Пт |Сб |Вс |Количество

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

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)

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)

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?


person Cante Ibanez    schedule 01.05.2009    source источник
comment
как (1) и (2) (так в оригинале) относятся к первому (1). Я не могу понять этот вопрос.   -  person spender    schedule 01.05.2009
comment
Ваш вопрос не ясен. Пожалуйста, объясните, как ваши данные структурированы таким образом, что один набор строк «принадлежит» другому.   -  person Winston Smith    schedule 01.05.2009
comment
@spender и joe, извините за мой неясный вопрос. я просто перефразировал. в любом случае, я просто хочу получить три группы: 5, 7 и 4.   -  person Cante Ibanez    schedule 01.05.2009
comment
Как мы узнаем из данных, что идентификаторы 2 и 3 принадлежат 1? Потому что у них один и тот же граф?   -  person Lucas    schedule 01.05.2009


Ответы (1)


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

Когда вы говорите «получить первую группу из 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
person Winston Smith    schedule 01.05.2009
comment
@joe, всю строку, если это набор данных. - person Cante Ibanez; 01.05.2009
comment
Или весь объект, если он входит в список‹T› - person Cante Ibanez; 01.05.2009
comment
Извините, я все еще не понимаю. Поскольку есть несколько строк с одинаковым количеством, что вы имеете в виду под всей строкой? Можете ли вы добавить пример ожидаемого результата? - person Winston Smith; 01.05.2009
comment
возможно, что-то вроде этого, я хочу получить идентификатор, дату и количество первой строки группы, скажем, группы из 5. Затем я хотел бы сделать то же самое с группой 7, я хочу получить идентификатор, дату и количество первой строки группы 7. - person Cante Ibanez; 01.05.2009
comment
Что представляет собой первый ряд? Первый по дате и времени? - person neouser99; 01.05.2009
comment
Поскольку он не был указан, приведенный выше запрос вернет первую запись в каждой группе в соответствии с текущим порядком списка. Конечно, если требуется определенный порядок, запрос может быть адаптирован для его включения. - person Winston Smith; 01.05.2009
comment
большое спасибо Джо! вы получили то, что мне нужно!! так как я новичок в LINQ, не могли бы вы помочь мне, объяснив свой код LINQ? как то, что опубликовано здесь «Xaisoft». - person Cante Ibanez; 01.05.2009
comment
Пояснение добавлено по запросу - person Winston Smith; 02.05.2009