LINQ to SQL отдельные записи - PullRequest
       0

LINQ to SQL отдельные записи

0 голосов
/ 11 августа 2010

Я хочу получить разные записи, используя LINQ не на основе Id, а на другом поле таблицы, т.е. на дате.Схема таблицы: ID (уникальный идентификатор), дата (dateTime), Desc varachar (50)

Записи имеют вид: 1-я строка:

Id 61DDF6A2-E5B7-4E88-91FE-5C63EF8E15D8
date 8/1/2010
Desc Abc

1-я строка:

Id 61DDF6A2-E5B7-4E88-91FE-5C63EF8E15D8
date 8/1/2010
Desc Abc

2-й ряд:

Id 61DDF6A2-E5B7-4E88-91FE-5C63EF8E15B1
date 8/1/2010
Desc Abc

3-й ряд:

Id 61DDF6A2-E5B7-4E88-91FE-5C63EF8E15D8
date 8/1/2010
Desc Xyz

4-й ряд:

Id 61DDF6A2-E5B7-4E88-91FE-5C63EF8E15D9
date 8/3/2010
Desc AAAA

5-й ряд:

Id 51DDF6A2-E5B7-4E88-91FE-5C63EF8E15D9
date 8/3/2010
Desc AAAA

Теперь, что я хочу, это отдельные записи на основе даты

Требуемый результат, как:

id 61DDF6A2-E5B7-4E88-91FE-5C63EF8E15D8
date 8/1/2010
Desc Abc

Id 61DDF6A2-E5B7-4E88-91FE-5C63EF8E15D9
date 8/3/2010
Desc AAAA

Ответы [ 2 ]

1 голос
/ 11 августа 2010

Хех, это так же, как мой ответ здесь от нескольких дней назад.

Вы можете использовать .Distinct с IEqualityComparer

var distinctdates = from dc.MyTable.Distinct(new MyComparer());

Хороший пример IEqualityComparer здесь - http://msdn.microsoft.com/en-us/library/bb338049.aspx

Если вы посмотрите на пример ProductComparer, все, что вам, вероятно, нужно будет сделать, это заменить часть «Проверьте, равны ли свойства продуктов» той проверке, которую вы хотите выполнить (в вашем случае вы сравниваете даты ) и это в значительной степени все.

0 голосов
/ 11 августа 2010
GroupBy(row => row.DateField) 
   .Select(group => group 
       .OrderBy(row => row.AnotherColumn) 
       .First() 

Это даст вам первую строку для каждого отдельного значения поля даты.

Row r1 = new Row { ID = "61DDF6A2-E5B7-4E88-91FE-5C63EF8E15D8", Date = Convert.ToDateTime("08/01/10"), Desc = "Abc" };
Row r2 = new Row { ID = "61DDF6A2-E5B7-4E88-91FE-5C63EF8E15B1", Date = Convert.ToDateTime("08/01/10"), Desc = "Abc" };
Row r3 = new Row { ID = "61DDF6A2-E5B7-4E88-91FE-5C63EF8E15D8", Date = Convert.ToDateTime("08/01/10"), Desc = "Xyz" };
Row r4 = new Row { ID = "61DDF6A2-E5B7-4E88-91FE-5C63EF8E15D9", Date = Convert.ToDateTime("08/03/10"), Desc = "AAAA" };
Row r5 = new Row { ID = "51DDF6A2-E5B7-4E88-91FE-5C63EF8E15D9", Date = Convert.ToDateTime("08/03/10"), Desc = "AAAA" };

List<Row> rows = new List<Row> { r1, r2, r3, r4, r5};

var result = rows
    .GroupBy(r => r.Date) 

    // Now we are simply selecting the first item of each subgroup. 
   .Select(group => group
       .OrderBy(row => row.ID) 
       .First());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...