如何解决Linq连接中的计数和总和
我想像SQL命令... count(column1.table1) as countname,sum(column2.table1) as sumname ...
中那样获得带有count列和sum列的行,但是我不知道用Linq编写它的正确方法,例如:
var get = (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
select 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,JumlahPacking = drdp.id_jadwal.Count(),TotalBerat = drdp.total_berat_packing.Sum()
}).ToList();
你们知道正确的方法吗?
解决方法
上面的评论正确地指出应该使用group by。
知道在分组依据中应该使用哪些键也很好。在上面的选择中,您列出了很多属性,其中两个应分组。请考虑添加和删除一些列。
为什么要删除列?由于性能。如果更多的列用于将id_jadwal
和total_berat_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()
这需要更高的性能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。