Linq到SQL/筛选重复项

本文关键字:筛选 SQL Linq | 更新日期: 2023-09-27 18:13:12

我的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
+-------+--------+--------------------------------+-----

我怎么能在林克做到这一点?由于guid和日期时间,"Distinct"不起作用

Linq到SQL/筛选重复项

您可以通过将元素按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()
    };
var res = list.GroupBy(c => c.name).Select(group => group.OrderBy( c1 => c1.datetime).First()).ToList();

只要日期时间存储为DateTime的实例,而不是字符串,这就应该有效。