首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq -如何编写group by查询以获取每个产品的数量

Linq -如何编写group by查询以获取每个产品的数量
EN

Stack Overflow用户
提问于 2020-05-29 01:32:01
回答 2查看 77关注 0票数 0

大家好,我有一个如下的数据

代码语言:javascript
复制
Item    Qty Type
1       2   Purchase
1       3   Sales
1       8   Return

2       5   Purchase
2       4   Sales
2       5   Return

现在我有一个需求,通过减去销售量和购买退货量来获得每件商品的数量,我的最终输出将是

代码语言:javascript
复制
item    Qty
1      -9
2      -4

注意:获取数量:数量=> (采购数量- SalesQty -退货数量)例如:(2-3-8)

那么,如何在LINQ或SQL中编写此查询呢

EN

回答 2

Stack Overflow用户

发布于 2020-05-29 01:40:01

SQL查询:

代码语言:javascript
复制
SELECT Item, SUM(CASE Type WHEN 'Purchase' THEN Qty ELSE -Qty END) AS Qty
FROM Table
GROUP BY Item

LINQ:

代码语言:javascript
复制
Items
.GroupBy(p => p.Item)
.Select(p => new
{
     Item = p.Key,
     Qty = p.Sum(x => x.Type == "Purchase" ? x.Qty : -x.Qty)
});
票数 0
EN

Stack Overflow用户

发布于 2020-05-29 06:07:06

如果您使用的是LINQ to SQL,则可以执行以下操作:

代码语言:javascript
复制
var ans = from i in src
          group i by i.Item into ig
          let PurchaseQty = ig.Where(i => i.Type == "Purchase").Sum(i => i.Qty)
          let SalesQty = ig.Where(i => i.Type == "Sales").Sum(i => i.Qty)
          let ReturnQty = ig.Where(i => i.Type == "Return").Sum(i => i.Qty)
          select new {
              Item = ig.Key,
              Qty = PurchaseQty - SalesQty - ReturnQty
          };

如果你正在使用LINQ to EF 2.2,它可能会工作,但会在客户端进行分组。如果你正在使用EF 3.x,祝你好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62070941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档