【发布时间】:2018-06-30 07:43:40
【问题描述】:
这是一个简单的概念,但 LINQ/SQL 解决方案让我难以理解!
在下面的示例数据中,我需要为每个 ID 检索一个 ISRC,并为每个 ID 取最早的日期。
数据按ID/ReleaseDate/ISRC 排序,因此我可以读取每个 ID 的第一条/顶部记录。
即 ID 1 = GBMNA1600001,ID 2 = GBMNA1600002,ID 3 = GBMNA1600003,ID 20 = GBMNA1680058.. .
ID ProductID ISRC ReleaseDate
1 16 GBMNA1600001 2016-03-27 00:00:00.0000000
1 26 GBMNA1680038 2016-04-24 00:00:00.0000000
1 32 GBMNA1680057 2016-05-01 00:00:00.0000000
1 132 GBMNA1680482 2016-11-13 00:00:00.0000000
1 223 GBMNA1781107 2017-03-26 00:00:00.0000000
2 5 GBMNA1600002 2016-02-14 00:00:00.0000000
2 32 GBMNA1680049 2016-05-01 00:00:00.0000000
3 13 GBMNA1600003 2016-03-13 00:00:00.0000000
3 38 GBMNA1680095 2016-05-29 00:00:00.0000000
3 485 GBMNA1880099 2018-06-26 00:00:00.0000000
20 32 GBMNA1680058 2016-05-01 00:00:00.0000000
20 39 GBMNA1680084 2016-05-29 00:00:00.0000000
20 116 GBMNA1680399 2016-10-30 00:00:00.0000000
20 281 GBMNA1780886 2017-06-05 00:00:00.0000000
20 360 GBMNA1600028 2018-01-08 00:00:00.0000000
但我不知道从哪里开始使用 LINQ 语法,甚至不知道它应该创建的 SQL。
我正在使用带有 EF 的 ASP.NET Core 2.0,代码是 C#,db 是 SQL Server 2016。
它在我使用 dbcontext 引用的表中,所以我开始使用
var earliestISRCS = from i in _context.allISRCS
select i;
我尝试使用MIN() 作为日期,或者对数据进行排序并使用.FirstOrDefault() 或Take(1),但只设法取回一条记录。
我需要的是返回一组数据——最早的ISRC per ID。
如果在同一日期碰巧有多个ISRC,那么ISRCS 的排序顺序将额外用于确定第一个。
【问题讨论】:
-
ISRC 值是否唯一?从您发布的示例数据中很难判断。
-
顺便说一句,您的
ID值不是唯一的..这背叛了“ID”(代表“身份”)的含义。 -
分组,Min,问题已解决
标签: c# sql sql-server entity-framework linq