我想要一个复杂的linq查询来转换存储过程或增加linq查询的速度。我想填充并将数据查询返回到虚拟表(mizan)。因为Linq查询很慢。我怎样才能做到这一点?
Mizan表:
public class DetayMizan {
public int DenetlenenId { get; set; }
public int ? Yil { get; set; }
public int ? Donem { get; set; }
public int ? KebirKodu { get; set; }
public string DetayKodu { get; set; }
public string HesapAdi { get; set; }
public string DetayHesapAdi { get; set; }
public decimal ? BorcTutari { get; set; }
public decimal ? AlacakTutari { get; set; }
public decimal ? NetBakiye { get; set; }
public decimal ? NetAlacak { get; set; }
public decimal ? NetBorc { get; set; }
}
QUERY:
public List < DetayMizan > MizanOlustur(int yil, int baslangic, int bitis, int kirilim, int denetlenen_id)
{
List < DetayMizan > mizan = new List<DetayMizan>(); // Mizan is virtual table
for (int i = 2; i <= kirilim; i++)
{
List < DetayMizan > merdiven = (from p in FASDBContext.BuyukDefter
where p.Yil == yil && p.DenetlenenId == denetlenen_id &&
((p.HesapKodu.Length - p.HesapKodu.Replace(".", "").Length) == i) &&
Convert.ToDateTime(p.YevmiyeTarih).Month >= baslangic &&
Convert.ToDateTime(p.YevmiyeTarih).Month <= bitis
group p by p.HesapKodu.Substring(0, p.HesapKodu.LastIndexOf('.')) into h
select new DetayMizan
{
DetayHesapAdi = h.First().HesapAdi,
HesapAdi = "",
BorcTutari = h.Sum(t => t.Borc),
AlacakTutari = h.Sum(t => t.Alacak),
NetBorc = (h.Sum(t => t.Borc) - h.Sum(t => t.Alacak) > 0 ? h.Sum(t => t.Borc) - h.Sum(t => t.Alacak) : 0),
NetAlacak = (h.Sum(t => t.Alacak) - h.Sum(t => t.Borc) > 0 ? h.Sum(t => t.Alacak) - h.Sum(t => t.Borc) : 0),
NetBakiye = h.Sum(t => t.Alacak) - h.Sum(t => t.Borc) > 0 ? (h.Sum(t => t.Alacak) - h.Sum(t => t.Borc)) : (h.Sum(t => t.Borc) - h.Sum(t => t.Alacak)),
DenetlenenId = denetlenen_id,
Yil = h.First().Yil,
KebirKodu = int.Parse(h.First().KebirKodu),
DetayKodu = h.First().HesapKodu.Substring(0, h.First().HesapKodu.LastIndexOf('.'))
}).ToList();
mizan.AddRange(merdiven);
}
return mizan;
}