Это простая концепция, но решение LINQ / SQL поставило меня в тупик!
В приведенном ниже примере данных для каждого идентификатора мне нужно получить один ISRC
, взяв самый ранний датированный для каждого.
Данные отсортированы по ID/ReleaseDate/ISRC
, поэтому я мог прочитать первую / верхнюю запись для каждого идентификатора.
то есть 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 он должен создать.
Я использую ASP.NET Core 2.0 с EF, код на C #, а db - это SQL Server 2016.
Это таблица, на которую я ссылаюсь, используя dbcontext, поэтому я начинаю с
var earliestISRCS = from i in _context.allISRCS
select i;
Я пытался использовать MIN()
для даты или сортировать данные и использовать .FirstOrDefault()
или Take(1)
, но мне удалось вернуть только одну запись.
Мне нужно вернуть набор данных - самое раннее ISRC
за ID
.
Если на одну и ту же дату окажется более одного ISRC
, для определения первого будет дополнительно использоваться порядок сортировки ISRCS
.