Linq to SQL / filter duplicates

我在我的sql server 2012中有一些重复的视图,我想用最新的方式对它们进行排序并过滤所有其他的 – 任何人都可以帮助我吗?

我在SQL Server 2012中的观点:

GUID(作为主键),数字,日期时间和名称

+-----+----------+--------------------------------+----- | guid | number| datetime | name +-----+----------+--------------------------------+------ | b105..| 1234567|2014-07-07T16:32:20.854+02:00:00|Name1 | s1b5..| 1111222|2014-07-06T16:30:21.854+02:00:00|Name2 | b17a..| 1234567|2014-07-06T15:22:17.854+02:00:00|Name1 | f205..| 1233333|2014-07-07T17:40:20.854+02:00:00|Name3 | b11t..| 1233333|2014-07-04T11:12:15.854+02:00:00|Name3 | rt85..| 1111222|2014-07-07T21:55:52.854+02:00:00|Name2 +-------+--------+--------------------------------+----- 

如果数字相同,则每次都是相同的名称。 例如,编号1234567始终是名称1。

我想过滤我的表,我只有最新的数字,没有重复

所以结果应该是:

 +-----+----------+--------------------------------+----- | guid | number| datetime | name +-----+----------+--------------------------------+------ | b105..| 1234567|2014-07-07T16:32:20.854+02:00:00|Name1 | f205..| 1233333|2014-07-07T17:40:20.854+02:00:00|Name3 | rt85..| 1111222|2014-07-07T21:55:52.854+02:00:00|Name2 +-------+--------+--------------------------------+----- 

我怎么能在Linq做到这一点? 由于guid和日期时间的原因,“Distinct”无效

 var res = list.GroupBy(c => c.name).Select(group => group.OrderBy( c1 => c1.datetime).First()).ToList(); 

只要datetime存储为DateTime的实例而不是字符串,这应该可以工作。

您可以通过将元素分组为2列来完成。 (号码和名称)。 然后访问分组数据。 你可以这样做:

 var query = from col in viewData group col by new { col.name, col.number, } into groupedCol select new viewData() { number = groupedCol.Key.number, name = groupedCol.Key.name, datetime = groupedCol.OrderBy( dateCol => dateCol.datetime).First() };