C# 联接中的Linq计数和求和

C# 联接中的Linq计数和求和,c#,asp.net,linq,linq-to-sql,C#,Asp.net,Linq,Linq To Sql,我想获得count列和sum列的行,就像SQL命令。。。count(column1.table1)作为countname,sum(column2.table1)作为sumname…,但我不知道用Linq编写它的正确方法,例如: var get=(来自db.data中的dbrg) 加入pbrg,加入db.pengiriman_barangs 关于dbrg.kode_barang等于pbrg.kode_barang 在db.jadwal_kapals中加入jdkp 关于pbrg.id_jadwal等

我想获得count列和sum列的行,就像SQL命令
。。。count(column1.table1)作为countname,sum(column2.table1)作为sumname…
,但我不知道用Linq编写它的正确方法,例如:

var get=(来自db.data中的dbrg)
加入pbrg,加入db.pengiriman_barangs
关于dbrg.kode_barang等于pbrg.kode_barang
在db.jadwal_kapals中加入jdkp
关于pbrg.id_jadwal等于jdkp.id_jadwal
在db.data_pelabuhans中加入dplb
关于jdkp.kode_pelabuhan等于dplb.kode_pelabuhan
将drdp加入到db.data\u redpacks中
关于dbrg.kode_barang等于drdp.kode_barang
选择新的
{
KodeBarang=dbrg.kode_barang,
TanggalKedatangan=jdkp.tglu kedatangan,
WaktuKedatangan=jdkp.waktu_kedatangan,
NamaPelabuhan=dplb.nama_pelabuhan,
Kota=dplb.Kota,
Provinsi=dplb.Provinsi,
NamaKapal=jdkp.kapal,
JumlahPacking=drdp.id_jadwal.Count(),
TotalBerat=drdp.total\u berat\u packing.Sum()
}).ToList();

你们知道正确的方法吗?

上面的评论正确地说应该使用group by


知道组中应该使用哪些键也是很好的。在上面的选择中,您列出了许多属性,其中两个属性应该分组。请考虑添加和移除一些列。 为什么要删除列?因为表现。如果使用更多列对
id\u jadwal
total\u berat\u packing
进行分组,则在数据库级别会产生成本

您可能会问,为什么要添加更多列?这可能是因为功能正确。现在你有七个经典属性,这些足够正确求和了吗?如果没有,请添加更多列并为这些列创建索引


我确实修改了查询以完成分组。如果您有问题,请在评论部分告诉我

var result = (from dbrg in db.data_barangs
           join pbrg in db.pengiriman_barangs
           on dbrg.kode_barang equals pbrg.kode_barang
           join jdkp in db.jadwal_kapals
           on pbrg.id_jadwal equals jdkp.id_jadwal
           join dplb in db.data_pelabuhans
           on jdkp.kode_pelabuhan equals dplb.kode_pelabuhan
           join drdp in db.data_redpacks
           on dbrg.kode_barang equals drdp.kode_barang
           group new { JumlahPacking = drdp.id_jadwal, TotalBerat = drdp.total_berat_packing }
           by new {
                KodeBarang = dbrg.kode_barang,
                TanggalKedatangan = jdkp.tgl_kedatangan,
                WaktuKedatangan = jdkp.waktu_kedatangan,
                NamaPelabuhan = dplb.nama_pelabuhan,
                Kota = dplb.kota,
                Provinsi = dplb.provinsi,
                NamaKapal = jdkp.kapal,
           }
           into beratAndPackingSumGroup
           select new
           {
               KodeBarang = beratAndPackingSumGroup.Key.KodeBarang,
               TanggalKedatangan = beratAndPackingSumGroup.Key.TanggalKedatangan,
               WaktuKedatangan = beratAndPackingSumGroup.Key.WaktuKedatangan,
               NamaPelabuhan = beratAndPackingSumGroup.Key.NamaPelabuhan,
               Kota = beratAndPackingSumGroup.Key.Kota,
               Provinsi = beratAndPackingSumGroup.Key.Provinsi,
               NamaKapal = beratAndPackingSumGroup.Key.NamaKapal,
               JumlahPacking = beratAndPackingSumGroup.Select(x => x.JumlahPacking).Count(),
               TotalBerat = beratAndPackingSumGroup.Sum(x => x.TotalBerat)
            });

如果
JumlahPacking
属性不正确,可以对其调用一个区分:
beratAndPackingSumGroup.Select(x=>x.JumlahPacking.Distinct().Count()
这需要更高的性能。

您是否要求为LINQ to Entities中的
as
关键字提供替代方案?您需要在选择之前使用group by。@ArsenKhachaturyan是的,因为我得到的
'int'不包含
TotalBerat=drdp.total\berat\u packing.Sum()上的“Sum”定义
@WowoOt我尝试过,但出现错误异常,我confused@robyiset“wowoot”建议是正确的,因为为了在LINQ查询上使用聚合函数,您需要使用
GroupBy
方法。以checkpost为例。