我希望通过使用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
答案 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());