如何在C#中将此SQL查询转换为LINQ或Lambda表达式?

时间:2019-02-06 13:31:02

标签: c# sql linq tsql lambda

我有以下简单表格:

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存在的所有ID。使用上表,此查询将返回Ids {1,2,3,5},这正是我想要的。

我尝试将其转换为Lambda表达式,但由于连接而不断失败。任何人都可以让我入门并指出正确的方向来编写此表达式吗?

这是我尝试过的:

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 :(得分:3)

您需要使用类似这样的东西:

 var result = Inventory
   .GroupBy(x => x.ProductId)
   .Where(x => x.Count() > 1)
   .SelectMany(x => x.ToList())
   .Select(x => x.Id);