2010-08-11 97 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例如,所有你可能會需要做的是用你想做的檢查來替換「檢查產品的屬性是否相等」部分(在你的情況下你會比較日期),這就是它。