none
Tarih Aralığındaki Günler İçinde Filtre RRS feed

  • Soru

  • public ActionResult PermisionPdfList(PermisionVm permision)

    {

    var FinishDateAdd1 = permision.FinishDate.AddDays(1); var list = from i in db.perIzin join b in db.birimler on i.BirimlerId equals b.Id where i.IsDeleted == false && i.IzinBasTarihi <= permision.FinishDate && i.IzinBitTarihi >= permision.StartDate select new PermisionVm { NameSurname = i.Personel.Ad + " " + i.Personel.Soyad, PermisionId = i.Id, StartDate = permision.StartDate < i.IzinBasTarihi ? i.IzinBasTarihi : permision.StartDate, FinishDate = permision.FinishDate > i.IzinBitTarihi ? i.IzinBitTarihi : FinishDateAdd1, UnitName = b.BirimAdi, Type = i.IzinTurleri.IzinAdi, UnitId = i.BirimlerId, Tc = i.Personel.Tc, Day = (int)DbFunctions.DiffDays(permision.StartDate < i.IzinBasTarihi ? i.IzinBasTarihi : permision.StartDate, permision.FinishDate > i.IzinBitTarihi ? i.IzinBitTarihi : FinishDateAdd1), }; var list1 = new List<PermisionVm>(); foreach (var izin in list) { var item = new PermisionVm(); item.NameSurname = izin.NameSurname; item.PermisionId = izin.PermisionId; item.StartDate = izin.StartDate; item.FinishDate = izin.FinishDate; item.UnitName = izin.UnitName; item.Type = izin.Type; item.Day = izin.Day - Helpers.PazarBul(izin.StartDate, izin.FinishDate); item.UnitId = izin.UnitId; item.Tc = izin.Tc; list1.Add(item); }

    }

    Yukarıda personel izin tablomdan tarihe göre izinleri çekiyorum ve istenilen tarih aralığındaki günleri de buluyorum.

    foreach döngü kısmında ise bu tarih aralıklarındaki pazar günlerini
     bulup gün sayısından çıkarıyorum.Bu şekli ile istediğim sonuca ulaşıyorum ancak çokta verimli bir yöntem gibi gelmiyor.kolay yolu nasıldır.Asp.Net mvc projesi için yardımınızı bekliyorum.
    • Düzenleyen ÖNER TAŞ 14 Ekim 2019 Pazartesi 09:04
    • Taşıyan Cihan YakarMVP 14 Ekim 2019 Pazartesi 10:22 Konunun MVC ile ilgisi yok.
    14 Ekim 2019 Pazartesi 09:01

Yanıtlar

Tüm Yanıtlar

  • Bu genel olarak iyi bir EF sorgusu degil. Veritabaninizda iliskileri tanimladiysaniz, EF model oluşturan araçlar bunu navigasyon propertyleri ile yansıtır ve boyle gereksiz Join kullanımı olmazdi.

    public ActionResult PermisionPdfList(PermisionVm permision)
    
    {
    	Func<DateTime, DateTime, DateTime, DateTime, int> izindays =
    		(pStart, pEnd, iStart, iEnd) =>
    		{
    			var start = pStart < iStart ? iStart : pStart;
    			var end = pEnd > iEnd ? iEnd : pEnd.AddDays(1);
    			
    			return Enumerable.Range(0, (int)(end-start).TotalDays+1)
    			.Count(e => start.AddDays(e).DayOfWeek != DayOfWeek.Sunday);
    		};
    	var FinishDateAdd1 = permision.FinishDate.AddDays(1);
    	var list = (from i in db.perIzin
    			   join b in db.birimler on i.BirimlerId equals b.Id
    			   where !i.IsDeleted
    			   && i.IzinBasTarihi <= permision.FinishDate
    			   && i.IzinBitTarihi >= permision.StartDate
    				select new {i,b})
    			   .AsEnumerable()
    			   .Select(ib =>  new PermisionVm
    			   {
    				   NameSurname = ib.i.Personel.Ad + " " + ib.i.Personel.Soyad,
    				   PermisionId = ib.i.Id,
    				   StartDate = permision.StartDate < ib.i.IzinBasTarihi ? ib.i.IzinBasTarihi : permision.StartDate,
    				   FinishDate = permision.FinishDate > ib.i.IzinBitTarihi ? ib.i.IzinBitTarihi : FinishDateAdd1,
    				   UnitName = ib.b.BirimAdi,
    				   Type = ib.i.IzinTurleri.IzinAdi,
    				   UnitId = ib.i.BirimlerId,
    				   Tc = ib.i.Personel.Tc,
    				   Day = izindays(permision.StartDate,
    				    permision.FinishDate,
    					ib.i.IzinBasTarihi,
    					ib.i.IzinBitTarihi)
    			   });
    	// ...		   
    }



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    14 Ekim 2019 Pazartesi 12:04
    Yanıtlayıcı
  • yanıtınız için teşekkürler.Yanlız uygulamada şöyle bir hata veriyor.Bu komut ile ilişkili, öncelikle kapatılması gereken açık bir DataReader zaten var.Birde burada sql sorgusunda sonra Gün(Day) ile ilgili işlem yapıyoruz değilmi.linq sorgusunda sql den veri almak dışında bir işlem yapamıyoruz sanırım.
    15 Ekim 2019 Salı 08:01
  • Ne demek istediğinizi anlayamadım.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    15 Ekim 2019 Salı 10:55
    Yanıtlayıcı
  • 

    Böyle bir hata aldım Çetin hocam.

    2 .sorum  örneğin aşağıdaki sorgunun select kısmında Day= alanında sizin oluşturmuş olduğunuz izindays fonksiyonunu kullanamıyorum."System.NotSupportedException: 'The LINQ expression node type 'Invoke' is not supported in LINQ to Entities." hatası alıyorum.

    var list = db.perIzin
                    //    .Where(w => w.IsDeleted == false
                    //                && w.IzinBasTarihi <= permision.FinishDate
                    //                && w.IzinBitTarihi >= permision.StartDate)

                    //    .Select(s => new PermisionVm
                    //    {
                    //        NameSurname = s.Personel.Ad + " " + s.Personel.Soyad,
                    //        PermisionId = s.Id,
                    //        StartDate = permision.StartDate < s.IzinBasTarihi ? s.IzinBasTarihi : permision.StartDate,
                    //        FinishDate = permision.FinishDate > s.IzinBitTarihi ? s.IzinBitTarihi : add1,
                    //        UnitName = s.Birimler.BirimAdi,
                    //        Type = s.IzinTurleri.IzinAdi,
                    //        UnitId = s.BirimlerId,
                    //        Tc = s.Personel.Tc,
                    //        Day = (int)DbFunctions.DiffDays(permision.StartDate < s.IzinBasTarihi ? s.IzinBasTarihi : permision.StartDate, permision.FinishDate > s.IzinBitTarihi ? s.IzinBitTarihi : add1),
                    //    });

    15 Ekim 2019 Salı 12:30
  • AsEnumerable'i ToList ile değiştirip dener misin.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    • Yanıt Olarak Öneren Mehmet Emin Kaymaz 16 Ekim 2019 Çarşamba 07:53
    • Yanıt Olarak İşaretleyen ÖNER TAŞ 16 Ekim 2019 Çarşamba 10:46
    15 Ekim 2019 Salı 12:43
    Yanıtlayıcı
  • Sorun çözüldü.Teşekkür ederim.
    16 Ekim 2019 Çarşamba 06:14
  • Sorun çözüldü.Teşekkür ederim.
    Cozulen sorunlarınızda, eğer varsa, bir mesajı cevap olarak işaretleyip kapatır misiniz. Eger siz sorularınızı boyle açık bırakmaya devam ederseniz ben işaretleyeceğim.


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    16 Ekim 2019 Çarşamba 08:26
    Yanıtlayıcı