Как преобразовать этот SQL-запрос в LINQ или лямбда-выражение в C #? - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть следующая простая таблица:

table : Inventory
+-------+-----------+-----------+
|   Id  | ProductId |   cost    |
+-------+-----------+-----------+
|   1   |   1       |     10    |
|   2   |   2       |     55    |
|   3   |   1       |     42    |
|   4   |   3       |     102   |
|   5   |   2       |     110   |
+-------+-----------+-----------+

У меня есть следующий запрос SQL:

SELECT T.Id
FROM Inventory AS T INNER JOIN
                             (SELECT ProductId
                               FROM Inventory
                               GROUP BY ProductId
                               HAVING (COUNT(*) > 1)) AS S ON T.ProductId = S.ProductId

Это работает, чтобы дать мне все идентификаторы, где существует дубликат ProductId.Используя приведенную выше таблицу, этот запрос вернул бы Ids {1,2,3,5}, и это именно то, что я хочу.

Я пытался преобразовать это в лямбда-выражение, но оно постоянно завершается ошибкой при объединении.Кто-нибудь может заставить меня начать и указать мне правильное направление, чтобы написать это выражение?

Это то, что я пытался:

var q = inventory.Join( inventory.GroupBy( o => o.ProductId ).Where( o => o.Count( ) > 1 ), g => g.ProductId, gb => gb.Key, ( g, gb ) => g.Id ).ToList( );

1 Ответ

0 голосов
/ 06 февраля 2019

Вам нужно использовать что-то вроде этого:

 var result = Inventory
   .GroupBy(x => x.ProductId)
   .Where(x => x.Count() > 1)
   .SelectMany(x => x.ToList())
   .Select(x => x.Id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...