我有这样的代码:
var subQuerytrue = from trd in _context.TrdSbphtms
where trd.Sell == false && trd.TrdOhDp == request.KodeDp
group trd by trd.TrdOhKode into g
select new { TRD_OH_Kode = g.Key, SisaNominal = g.Sum(x => x.SisaNominal) };
var equery = (from a in subQuerytrue
join mobl in _context.Mobls on a.TRD_OH_Kode equals mobl.MoblCode into moblGroup
from m in moblGroup.DefaultIfEmpty()
where m.MoblMaturityDate > td
select new
{
PIHAK = m.MoblIssuer ?? "",
NAMAINVESTASI = a.TRD_OH_Kode ?? "",
TGLJATUHTEMPO = m.MoblMaturityDate,
SUKUBUNGA = m.MoblInterest ?? 0,
HARIDIAKUI = m.MoblJangka * 30,
HARITAHUN = 360,
JANGKA = m.MoblJangka ?? 0,
TGLTERBIT = m.MoblIssuedDate,
TGLBUNGA = m.MoblTanggalBunga ?? 0,
SISANOMINAL = a.SisaNominal ?? 0,
MOBLCODE = m.MoblCode ?? ""
}).ToList();
if (equery.Any())
{
foreach (var item in equery)
{
jangka = item.JANGKA;
DateTime defaultDate = new(2000, 1, 1);
DateTime? ptgljthtempo = item.TGLJATUHTEMPO;
DateTime? ptglterbit = item.TGLTERBIT;
int? ptglbunga = item.TGLBUNGA;
double? psisanominal = item.SISANOMINAL;
string? pnamainvestasi = item.NAMAINVESTASI;
string? MOBLCODE = item.MOBLCODE;
int monthsDifference = ((ptgljthtempo ?? defaultDate).Year - (ptglterbit ?? defaultDate).Year) * 12 + (ptgljthtempo ?? defaultDate).Month - (ptgljthtempo ?? defaultDate).Month;
max_pay = monthsDifference / jangka;
if (ptglterbit != null)
{
int monthsDiff = ((td.Year - ptglterbit.Value.Year) * 12) + td.Month - ptglterbit.Value.Month;
if (monthsDifference % jangka == 0)
{
bayar_ke = monthsDiff / jangka;
}
else
{
bayar_ke = 0;
}
}
if (bayar_ke > 0)
{
if (ptglbunga != null)
{
DateTime targetDate = new((request.Periode ?? defaultDate).Year, (request.Periode ?? defaultDate).Month, (int)ptglbunga);
var rs3 = (from trd in _context.TrdSbphtmSells where trd.TglBeli > targetDate && trd.TrdOhKode == MOBLCODE select trd.Nominal).Sum();
bnghitung = jangka * (int)ptglbunga * ((psisanominal ?? 0) - (rs3 > 0 ? rs3.Value ?? 0 : 0)) / 1200;
bng = 0;
tglbunga = new DateTime((request.PeriodTo ?? defaultDate).Year, (request.PeriodTo ?? defaultDate).Month, (int)ptglbunga);
Nom = 0;
var rs3true = (from trd in _context.TrdSbphtms where trd.TglBeli > tglbunga && trd.TrdOhKode == pnamainvestasi
group trd by 1 into g select new { a = g.Sum(x => x.SisaNominal), b = g.Sum(x => x.Nominal) }).FirstOrDefault();
Nom = rs3true?.a ?? 0;
var rs4true = (from trd in _context.TrdSbphtmSells where trd.TglBeli > tglbunga && trd.TrdOhKode == pnamainvestasi
group trd by 1 into g select new { a = g.Sum(x => x.SisaNominal), b = g.Sum(x => x.Nominal) }).FirstOrDefault();
Nom += rs4true?.a ?? 0;
if (bnghitung > 0)
{
var detailquery = equery.Select(s => new
{
s.PIHAK,
s.NAMAINVESTASI,
TGLJATUHTEMPO = tglbunga,
NILAINOMINAL = (psisanominal - Nom) == 0 ? rs4true?.b * -1 : psisanominal - Nom,
s.SUKUBUNGA,
s.HARIDIAKUI,
s.HARITAHUN,
BUNGAHITUNG = bnghitung,
BUNGAREAL = bng,
TANGGALTERIMA = tglbunga,
Keterangan = bayar_ke + " dari " + max_pay
});
// DETAIL
model.ReportBungaRealSBPDetails = detailquery.Where(w => w.BUNGAHITUNG > 0).Select(s => new ReportBungaRealSBPDetail
{
PIHAK = s.PIHAK,
NAMAINVESTASI = s.NAMAINVESTASI,
TGLJATUHTEMPO = s.TGLJATUHTEMPO,
NILAINOMINAL = s.NILAINOMINAL,
SUKUBUNGA = s.SUKUBUNGA,
HARIDIAKUI = s.HARIDIAKUI,
HARITAHUN = s.HARITAHUN,
BUNGAHITUNG = s.BUNGAHITUNG,
BUNGAREAL = s.BUNGAREAL,
TANGGALTERIMA = s.TANGGALTERIMA,
Keterangan = s.Keterangan
}).ToList();
}
}
}
}
}
结果应该只有 2 条记录,且 bnghitung > 0。
我的问题是,当我调试时。 model.ReportBungaRealSBPDetails正在获取equery的所有结果,即39条记录。并且所有记录的“bnghitung”都变得相同。
为什么?仅当满足条件时,我才想添加到 model.ReportBungaRealSBPDetails 中。上面的代码有什么问题吗?
需要建议请。
谢谢你。
好吧,这就是我的看法:
如果当您之前计算了几行的 bnghitung 时,您会进入这个, 是 > 0。但是,然后您用 equery 中包含的每个实例填充详细查询,并且 给每个实例相同的值。这意味着详细查询中的所有记录都符合 bnghitung > 0 的条件。
我无法给你一个正确的解决方案,因为我不太确定你希望这件事如何结束。所以我只是包括我认为出错的代码空间。
if (bnghitung > 0)
{
var detailquery = equery.Select(s => new
{
s.PIHAK,
s.NAMAINVESTASI,
TGLJATUHTEMPO = tglbunga,
NILAINOMINAL = (psisanominal - Nom) == 0 ? rs4true?.b * -1 : psisanominal - Nom,
s.SUKUBUNGA,
s.HARIDIAKUI,
s.HARITAHUN,
BUNGAHITUNG = bnghitung, //this is the issue
BUNGAREAL = bng,
TANGGALTERIMA = tglbunga,
Keterangan = bayar_ke + " dari " + max_pay
});
// DETAIL
model.ReportBungaRealSBPDetails = detailquery.Where(w => w.BUNGAHITUNG > 0).Select(s => new ReportBungaRealSBPDetail
{
PIHAK = s.PIHAK,
NAMAINVESTASI = s.NAMAINVESTASI,
TGLJATUHTEMPO = s.TGLJATUHTEMPO,
NILAINOMINAL = s.NILAINOMINAL,
SUKUBUNGA = s.SUKUBUNGA,
HARIDIAKUI = s.HARIDIAKUI,
HARITAHUN = s.HARITAHUN,
BUNGAHITUNG = s.BUNGAHITUNG,
BUNGAREAL = s.BUNGAREAL,
TANGGALTERIMA = s.TANGGALTERIMA,
Keterangan = s.Keterangan
}).ToList();
}