У меня есть следующая простая таблица:
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( );