none
sql sorgusunu c# linq'e çevirme RRS feed

  • Soru

  • select * 
    from KISILER k
    where not exists (
      select * 
      from GELENLER g
      where k.personelID = g.puantajID and
        cast(g.puantajkarthareket as date) = cast(getdate() as Date) );

    cetin abi çok uğraştım ama ben yapamadım kod tam istediğim gibi çalışıyor ama ben c# ta yazamadım. dönüşümü için yardımcı olurmusunuz?

    birde datagride nasıl aktarırım sorgu sonucunu
    • Düzenleyen Yasin AKAR 28 Haziran 2020 Pazar 17:44
    28 Haziran 2020 Pazar 17:36

Yanıtlar

  • Once sorunda yazmistim ya cevabini:

    var islemsiz = db.Kisiler
            .Where( x => !x.Islemler
                .Any( y => y.Tarih.Date == DateTime.Today)); 

    Senin tablolarınla (senin derken iliskileri doğrular olan Ortak database ile):

    var islemsiz = db.Personel
            .Where( x => !x.Puantaj
                .Any( y => y.Tarih.Date == DateTime.Today)); 



    Blog
    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.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.

    • Yanıt Olarak İşaretleyen Yasin AKAR 28 Haziran 2020 Pazar 21:20
    28 Haziran 2020 Pazar 20:27
    Yanıtlayıcı
  • (Not: Cihan'in yazdigi doğru ancak yanlislikla ! yanlış yerde. !x.Puantaj(...) olacak)

    Hatta aslına bakarsan Cihan'in yazdigi (dikkat edersen benim yazdigim orijinal de öyle) daha doğru. Birisinde açık secik .Date = DateTime.Today diyerek date'e cast etmesini istiyoruz.

    y.Tarih == DateTime.Today 

    saglam degil. Ya tasarimi dediğim gibi değiştir NOT NULL olsun (tablo yaratıldıktan sonra da söyle değiştirebilirsin):

    Alter table gelenler 
       alter column Tarih datetime 
       default getdate() NOT NULL;

    Ya da Linq'da (tasarımda değiştirmekteyiz daha akıllıca):

    ((DateTime)y.Tarih).Date == DateTime.Today
    kullan.


    Blog

    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.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.



    • Düzenleyen CetinBasozEditor 29 Haziran 2020 Pazartesi 11:51
    • Yanıt Olarak İşaretleyen Yasin AKAR 29 Haziran 2020 Pazartesi 13:01
    29 Haziran 2020 Pazartesi 11:46
    Yanıtlayıcı
  • Ben tutarlı olmama ihtimali olan bir DB kurmam. Diyelim devamsızlık tablosuna attın. Meğer o kişi gelmişmiş kaydı düzelttiler. Ne olacak? Ekstradan devamsızlık tablosunu kontrol etmen gerekecek. Bu gibi şeyler çoğaldıkça bir yerde kontrol kaçıyor. Performans için yanıtı cachelemen daha doğru olacaktır.

    www.cihanyakar.com

    30 Haziran 2020 Salı 16:02

Tüm Yanıtlar

  • Tablolarınız, ilişkileriniz doğru ise:

    db.Kisiler.Any(k=>k.puantajkarthareket.Date != DateTime.Today)

    kullandığınız ORM'ye göre şöyle de olabilir.

    var today = DateTime.Today;
    db.Kisiler.Any(k=>k.puantajkarthareket.Date != today);


    www.cihanyakar.com



    28 Haziran 2020 Pazar 19:07
  • sonuç tam istediğim gibi ama ben yapamadım maalesef c# ta gösteremedim böyle sonucu
    28 Haziran 2020 Pazar 19:35
  • Benim sorguyu yazdığınızda nerelerde hata veriyor? 

    www.cihanyakar.com

    28 Haziran 2020 Pazar 20:08
  • Once sorunda yazmistim ya cevabini:

    var islemsiz = db.Kisiler
            .Where( x => !x.Islemler
                .Any( y => y.Tarih.Date == DateTime.Today)); 

    Senin tablolarınla (senin derken iliskileri doğrular olan Ortak database ile):

    var islemsiz = db.Personel
            .Where( x => !x.Puantaj
                .Any( y => y.Tarih.Date == DateTime.Today)); 



    Blog
    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.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.

    • Yanıt Olarak İşaretleyen Yasin AKAR 28 Haziran 2020 Pazar 21:20
    28 Haziran 2020 Pazar 20:27
    Yanıtlayıcı
  • DateTime Date tanımı içermiyor diyor date genişletme yöntemi bulunamadı

    var today = DateTime.Today;
    db.Kisiler.Any(k=>k.puantajkarthareket.Date != today);

    db.kişilerde puantajkarthareket colonu yok ben onu GELENLER olarak değişitiriyorum çünki o bu tabloda

    28 Haziran 2020 Pazar 20:30
  •        var islemsiz = veri.Personel
              .Where(x => !x.Puantaj
                 .Any(y => y.Tarih == DateTime.Today));
                    {
                        dataGridView3.DataSource=islemsiz;
                    }

    Tarih.Date den Date kelimesini çıkarınca çalıştı

    29 Haziran 2020 Pazartesi 09:55
  • Saati tutmuyorsan çalışır. Bir de o sorgu hatalıydı. Düzeltmiştim. == değil != olması gerekiyor.

    www.cihanyakar.com

    29 Haziran 2020 Pazartesi 10:00
  •       var islemsiz = veritabanim.KISILER
              .Where(x => !x.GELENLER
                 .Any(y => y.puantajkarthareket == DateTime.Today));
                    {
                        dataGridView3.DataSource=islemsiz;
                    }

    Çetin abi Allah sizden razı olsun benim veri tabanını da düzelttim sayenizde oda çalıştı Cihan ustam sizden de Allah razı olsun

    29 Haziran 2020 Pazartesi 10:05
  •        var islemsiz = veri.Personel
              .Where(x => !x.Puantaj
                 .Any(y => y.Tarih == DateTime.Today));
                    {
                        dataGridView3.DataSource=islemsiz;
                    }

    Tarih.Date den Date kelimesini çıkarınca çalıştı

    Aslinda Cihan'in yazdigi da doğru. Veritabaninda aceleden ufak bir tasarım hatası vardi. Hatırlarsan Tarihi su sekilde yazdık:

    create table ...
    
    Tarih DateTime default getdate()
    ...

    Bu sekilde yazınca otomatikman NULL olabilir demis olduk (SQL Server kendisi aksini soylemdikce NULL yazmisiz gibi kabul ediyor). Boyle olunca da, C# tarafında data tipi DateTime degil DateTime? ve o yüzden Tarih.Date hata verir. ((DateTime)Tarih).Date olsa hata vermeyecekti.

    Tasarim bastam doğrular olsa su sekilde yazacaktık:

    create table ...
    
    Tarih DateTime default getdate() NOT NULL
    ...

    ve data tipi DateTime olacagi icin dogrudan Tarih.Date kullanilabilir hale gelecekti.

    Temel olarak benim hatam yani :) SQL server akillisi, içerisinde default olmasina ragmen NOT NULL belirlemiyor o alanı.



    Blog
    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.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.

    29 Haziran 2020 Pazartesi 11:43
    Yanıtlayıcı
  • (Not: Cihan'in yazdigi doğru ancak yanlislikla ! yanlış yerde. !x.Puantaj(...) olacak)

    Hatta aslına bakarsan Cihan'in yazdigi (dikkat edersen benim yazdigim orijinal de öyle) daha doğru. Birisinde açık secik .Date = DateTime.Today diyerek date'e cast etmesini istiyoruz.

    y.Tarih == DateTime.Today 

    saglam degil. Ya tasarimi dediğim gibi değiştir NOT NULL olsun (tablo yaratıldıktan sonra da söyle değiştirebilirsin):

    Alter table gelenler 
       alter column Tarih datetime 
       default getdate() NOT NULL;

    Ya da Linq'da (tasarımda değiştirmekteyiz daha akıllıca):

    ((DateTime)y.Tarih).Date == DateTime.Today
    kullan.


    Blog

    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.


    Not: Temelin geri zekali arkadasi Idris bu mesaja da atlayip ne kadar aptal oldugunu bir kez daha belgeleyebilir. Kendisinin tek marifeti beni takip edip, neden her soruya cevap verdigimi, yardim etmeye calistigimi sorgulamaktir. Bu beyinsiz zavalliya, aptal oldugunu hatirlatmayi unutmayiniz.



    • Düzenleyen CetinBasozEditor 29 Haziran 2020 Pazartesi 11:51
    • Yanıt Olarak İşaretleyen Yasin AKAR 29 Haziran 2020 Pazartesi 13:01
    29 Haziran 2020 Pazartesi 11:46
    Yanıtlayıcı
  •  var islemsiz = veritabanim.KISILER
                                  .Where(x => !x.GELENLER
                                //    .Any(y =>((DateTime) y.puantajkarthareket).Date == DateTime.Today));
                                .Any(y => y.puantajkarthareket.Date == DateTime.Today));

    evet not null yaptım iki şekildede çalıştı tekrar teşekkürler

    29 Haziran 2020 Pazartesi 13:11
  • var islemsiz = veritabanim.KISILER
                                  .Where(x => !x.GELENLER
                                //    .Any(y =>((DateTime) y.puantajkarthareket).Date == DateTime.Today));  puantajkarthareketinot null yapılmadan yazılan kod
                                .Any(y => y.puantajkarthareket.Date == DateTime.Today));
                {
                    
                    dataGridView3.DataSource = islemsiz;
    
    
                  DEVAMSIZLAR islemyapmayan = new DEVAMSIZLAR();
                    islemyapmayan.devamsizlikTarihi = DateTime.Today;

    ustalar benim aklıma bir soru geldi burada diyelim ki her 24 saat sonunda otomatik bu sorgu çalıştı o gün işlem yapmayanlar belirlendi  o günün tarihini de DEVAMSIZLAR  tablosuna attım veya gerek var mı ? 1 hafta sonra tüm devamsızları göster dediğimde sonuçları nasıl gösterebilirim  O kişilerin  ID leri  veya isimleri ile  işlemsiz tarihler nasıl eşleşir burada mesele tablo ilişkilendirme de mi bitiyor  çok olmuyorum inşallah :)

    
    

    30 Haziran 2020 Salı 15:57
  • Ben tutarlı olmama ihtimali olan bir DB kurmam. Diyelim devamsızlık tablosuna attın. Meğer o kişi gelmişmiş kaydı düzelttiler. Ne olacak? Ekstradan devamsızlık tablosunu kontrol etmen gerekecek. Bu gibi şeyler çoğaldıkça bir yerde kontrol kaçıyor. Performans için yanıtı cachelemen daha doğru olacaktır.

    www.cihanyakar.com

    30 Haziran 2020 Salı 16:02
  • teşekkür ederim
    30 Haziran 2020 Salı 16:37