我在我的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和日期时间不起作用
答案 0 :(得分:0)
var res = list.GroupBy(c => c.name).Select(group => group.OrderBy( c1 => c1.datetime).First()).ToList();
只要将datetime存储为DateTime
的实例而不是字符串,这应该有效。
答案 1 :(得分:0)
您可以通过将元素分组为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()
};