按条件查找记录,如果它们有一些相等的字段,则只选择一个(LINQ)

时间:2012-02-22 10:09:26

标签: c# linq linq-to-sql

我有一个班级BaseEvent,它有以下字段:

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条记录(当前日期)。但前两个记录是同一个事件。 我想在结果中只有两个记录:3和(1或2) 我怎么能这样做?
谢谢。

P.S。我为此目的介绍了SimillarId,但我不知道如何使用它来构建查询。

P.S.2。如果必要,请更改问题名称。

2 个答案:

答案 0 :(得分:2)

使用.Distinct()作为参数,首先必须先实现IEqualityComparer<BaseEvent>

答案 1 :(得分: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();