2012-02-22 1 views
0

У меня есть класс BaseEvent и имеют следующие поля:поиск записей по критериям и выбрать только один, если у них есть равное поле (LINQ)

Name, RecurrenceStart, RecurrenceEnd, SimillarId 

Например у нас есть данные в таблице:

Name   RecurrenceStart    RecurrenceEnd   SimillarId 
Event1  2012-02-21 09:00:00.000  2012-02-28 11:30:00.000  1 
Event1  2012-02-21 04:30:00.000  2012-02-28 07:00:00.000  1 
Event2  2012-02-21 06:30:00.000  2012-02-29 09:00:00.000  2 

И у нас есть следующий запрос:

var today = DateTime.Now; 
    return Database.BaseEvents.Where(e => e.RecurrenceStart.Value.Date <= today 
      && e.RecurrenceEnd.Value.Date >= today).ToList(); 

запрос возвращал все 3 записи (для Curren t дата). Но первые две записи - это одно и то же событие. Я хочу, чтобы в результате получилось всего две записи: 3 и (1 или 2).
Как я могу это сделать?
Спасибо.

P.S. Для этой цели я представил SimillarId, но я не знаю, как построить с ней запрос или нет.

P.S.2. Измените имя вопроса если это необходимо.

ответ

2

Использование .Distinct() с IEqualityComparer<BaseEvent> в качестве аргумента, который вы должны осуществить первую.

1

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

var today = DateTime.Now; 
    return Database.BaseEvents.Where(e => e.RecurrenceStart.Value.Date <= today 
      && e.RecurrenceEnd.Value.Date >= today) 
      .GroupBy(v => v.Name).Select(g => g.First()).ToList(); 
+0

Для 'Distinct' для работы вам нужно будет реализовать' IEqualityComparer 'на объекте. Я не знаю, возможно ли это для вас. –