【问题标题】:Grouping and Sum some field with Sub query in LINQ在 LINQ 中使用子查询对某些字段进行分组和求和
【发布时间】:2016-01-07 03:45:12
【问题描述】:

我正在尝试将我的 sql 查询转换为 linq,我对 sum 和 grouping 感到困惑, 这是我的查询

SELECT 
  produk.supplier,
  SUM(transaksi.jumlah_transaksi),
  SUM(transaksi.nominal_transaksi),
  operasional.nominal 
FROM
  transaksi INNER JOIN produk ON transaksi.id_produk = produk.id_produk 
  LEFT JOIN 
    (SELECT 
      operasional.id_supplier,
      SUM(nominal) AS nominal 
    FROM
      operasional) operasional 
    ON operasional.id_supplier = produk.id_supplier 
GROUP BY produk.supplier 

输出应该是 像这样

进展 我只是在尝试这样的 linq 查询而不分组

var result = from t in db.transaksi
             join p in db.produk on t.id_produk equals p.id_produk
             from op in 
             (
                  from o in db.operasional
                  select new
                  {
                       id_supplier = o.id_supplier,
                       nominal = o.nominal
                  }
             ).Where(o => o.id_supplier == p.id_supplier).DefaultIfEmpty()
             select new
             {
                  nama_supplier = p.supplier,
                  jumlah_transaksi = t.jumlah_transaksi,
                  nominal_transaksi = t.nominal_transaksi,
                  biaya_operasional = op.nominal
             };

我的 linq 的结果查询仍然像这样

SELECT 
  `p`.`supplier`,
  `t`.`jumlah_transaksi`,
  `t`.`nominal_transaksi`,
  `t1`.`nominal` 
FROM
  `transaksi` `t` 
  INNER JOIN `produk` `p` 
    ON `t`.`id_produk` = `p`.`id_produk` 
  LEFT JOIN `operasional` `t1` 
    ON `t1`.`id_supplier` = `p`.`id_supplier`

已解决 这是我的完整 linq

var result = from t in db.transaksi
             join p in db.produk on t.id_produk equals p.id_produk
             from op in 
             (
                  from o in db.operasional
                  group o by o.id_supplier into g
                  select new
                  {
                       id_supplier = g.First().id_supplier,
                       nominal = g.Sum(o => o.nominal)
                  }
             ).Where(o => o.id_supplier == p.id_supplier).DefaultIfEmpty()
             select new
             {
                  nama_supplier = p.supplier,
                  jumlah_transaksi = t.jumlah_transaksi,
                  nominal_transaksi = t.nominal_transaksi,
                  biaya_operasional = op.nominal
             };
var grouped = result
              .GroupBy(x => x.nama_supplier)
              .Select(x => new
              {
                   nama_supplier = x.Key,
                   jumlah_transaksi = x.Sum(s => s.jumlah_transaksi),
                   nominal_transaksi = x.Sum(s => s.nominal_transaksi),
                   biaya_operasional = x.Select(s => s.biaya_operasional).First()
              });

【问题讨论】:

    标签: c# mysql linq


    【解决方案1】:

    尝试使用 GroupBy(下面的代码结果是您从上面的代码中查询):

    var grouped = result
        .GroupBy(x => x.nama_supplier)
        .Select(x => new {
            nama_supplier = x.Key,
            sum1 = x.Sum(s => s.jumlah_transaksi),
            sum1 = x.Sum(s => s.nominal_transaksi),
            nominal = x.Select(s => s.biaya_operasional).First()
        })
    

    代码没有被检查,所以把它当作想法来使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多