Linq Query转换mssql存储过程

时间:2018-04-20 08:13:39

标签: c# linq stored-procedures .net-core

我想要一个复杂的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;
}

0 个答案:

没有答案