LINQ to SQL的不同记录

时间:2010-08-11 03:18:30

标签: linq-to-sql

我希望通过使用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

第二行:

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 个答案:

答案 0 :(得分:1)

嘿,这与几天前的答案here相同。

您可以将.Distinct与IEqualityComparer一起使用

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

IEqualityComparer的一个很好的例子就在这里 - http://msdn.microsoft.com/en-us/library/bb338049.aspx

如果您查看了ProductComparer示例,那么您可能需要做的就是将“检查产品属性是否相同”替换为您要进行的检查(在您的情况下,您将比较日期) )这就是它。

答案 1 :(得分:0)

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());