2010-08-11 105 views
0

我想通过使用LINQ而不是基于Id但在表的其他字段(即日期)上获得不同的记录。 表架构是ID(唯一标识符),日期(日期时间),说明varachar(50)LINQ to SQL清晰记录

记录是这样的: 第一行:

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

第一行:

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 
+0

对不起,我的响应者已经损坏。但严重的是,措辞良好的问题赢得了额外的积分。你的不是其中之一。 – 2010-08-11 03:24:36

+0

您可以添加数据集和预期输出的示例吗? – 2010-08-11 04:44:48

+0

您没有详细说明问题。 在预期产出的第一行,为什么它应该是“Abc”而不是“Xyz”。应该选择哪个GUID? – RyanHennig 2010-08-11 05:44:46

回答

0
GroupBy(row => row.DateField) 
    .Select(group => group 
     .OrderBy(row => row.AnotherColumn) 
     .First() 

这会给你每个不同的datefield值的第一行。

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

Bzzzzz!错误的答案。再次阅读问题。 – leppie 2010-08-11 03:59:13

+0

var r =(from ..... blah blah).Distinct() 是的,它会返回不同的记录,但在我的情况下,所有的记录都有唯一的ID,因此所有的记录都是不同的。我想要的是获取具有不同日期值的记录 – munish 2010-08-11 04:33:12

+0

您可以添加数据集和预期输出的示例吗? – 2010-08-11 04:43:17

1

嘿,这和我几天前回答的here一样。

可以使用.Distinct用的IEqualityComparer

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

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

如果检查出ProductComparer例如,所有你可能会需要做的是用你想做的检查来替换“检查产品的属性是否相等”部分(在你的情况下你会比较日期),这就是它。