folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Linq Sorgusu İle İlglili Bir Problem



Linq Sorgusu İle İlglili Bir Problem

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    FCN
    FCN's avatar
    Kayıt Tarihi: 28/Eylül/2007
    Erkek

    status database te  0,1,2  oalrak tutuluyor.

    şu yazdıgım sorgu

       var sorgu = from c in db.main

                                where (c.UserID == calisanid)

                                select new

                                {

                                  projeismi =  c.projects.ProjectName,

                                  uniteismi =  c.units.UnitName,

                                  Binaismi  =  c.builds.BuildName,

                                  isismi =  c.jobs.JobName,

                                  turismi = c.kinds.KindName,

                                  hedefsure =  c.DesTime,

                                  harcanansure =  c.ProcTime,

                                  durum = getValue(c.Status)

                                };

     

    şu getvalue ile döndürdügüm değer .  

      private string getValue(int durum)

            {

                if (durum == 0)

                    return "Bitti";

                else if (durum == 1)

                    return "Bekliyor";

                else

                    return "Başlanmamış";

            }

    verdiği hata 

    LINQ to Entities does not recognize the method 'System.String getValue(Int32)' method, and this method cannot be translated into a store expression.

     

    kısaca bana lazım olan sorgudaki 0 1 2 gelen yeriyi başlanmamış,bekliyor,bitti  gibi değiştirmek.

    foreachle veya list olarak döndürsem sanırım performans kaybı olcak. önerisi olan varmı :|

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    EF 4.0 de şöyle bir şey converter var SqlFunctions.StringConvert bunu bi dene istersen

     

    şöyle dene 

      private string getValue(int durum)  buradeki fonksiyonun paremetre türü string olsun string durum (fonksiyon içindeki durum == deki karşılaştırmaları da string yapman lazım

    ve select içindekini de bu şekilde çevirip dene bakalım

                                  durum = getValue(SqlFunctions.StringConvert((double)c.Status))

     

    son hali bu

    unbalanced tarafından 11/Eyl/12 17:47 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SpArK
    SpArK's avatar
    Kayıt Tarihi: 17/Temmuz/2005
    Erkek
    FCN bunu yazdı

    status database te  0,1,2  oalrak tutuluyor.

    şu yazdıgım sorgu

       var sorgu = from c in db.main

                                where (c.UserID == calisanid)

                                select new

                                {

                                  projeismi =  c.projects.ProjectName,

                                  uniteismi =  c.units.UnitName,

                                  Binaismi  =  c.builds.BuildName,

                                  isismi =  c.jobs.JobName,

                                  turismi = c.kinds.KindName,

                                  hedefsure =  c.DesTime,

                                  harcanansure =  c.ProcTime,

                                  durum = getValue(c.Status)

                                };

     

    şu getvalue ile döndürdügüm değer .  

      private string getValue(int durum)

            {

                if (durum == 0)

                    return "Bitti";

                else if (durum == 1)

                    return "Bekliyor";

                else

                    return "Başlanmamış";

            }

    verdiği hata 

    LINQ to Entities does not recognize the method 'System.String getValue(Int32)' method, and this method cannot be translated into a store expression.

     

    kısaca bana lazım olan sorgudaki 0 1 2 gelen yeriyi başlanmamış,bekliyor,bitti  gibi değiştirmek.

    foreachle veya list olarak döndürsem sanırım performans kaybı olcak. önerisi olan varmı :|

    Sen o sorguyu yazıp o var ın içine almana rağmen linq onu çalıştırmıyor store ediyor procedure halinde, daha sonra .List() veya elemanlara ulaşmaya çalıştığın andan itibaren. O yüzden senin kendi yazdığın bir fonksiyonu store procedure hale getirip saklayamıyor. LINQ sorgusunun içinde bu tip kendi fonksiyon çağrılarını property çağrılarını pek yapma. durum = c.Status yap, daha sonra durum u getValue ya yollayıp geri al abi.

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TeRRoR
    TeRRoR's avatar
    Kayıt Tarihi: 06/Nisan/2007
    Erkek
    SpArK bunu yazdı
    FCN bunu yazdı

    status database te  0,1,2  oalrak tutuluyor.

    şu yazdıgım sorgu

       var sorgu = from c in db.main

                                where (c.UserID == calisanid)

                                select new

                                {

                                  projeismi =  c.projects.ProjectName,

                                  uniteismi =  c.units.UnitName,

                                  Binaismi  =  c.builds.BuildName,

                                  isismi =  c.jobs.JobName,

                                  turismi = c.kinds.KindName,

                                  hedefsure =  c.DesTime,

                                  harcanansure =  c.ProcTime,

                                  durum = getValue(c.Status)

                                };

     

    şu getvalue ile döndürdügüm değer .  

      private string getValue(int durum)

            {

                if (durum == 0)

                    return "Bitti";

                else if (durum == 1)

                    return "Bekliyor";

                else

                    return "Başlanmamış";

            }

    verdiği hata 

    LINQ to Entities does not recognize the method 'System.String getValue(Int32)' method, and this method cannot be translated into a store expression.

     

    kısaca bana lazım olan sorgudaki 0 1 2 gelen yeriyi başlanmamış,bekliyor,bitti  gibi değiştirmek.

    foreachle veya list olarak döndürsem sanırım performans kaybı olcak. önerisi olan varmı :|

    Sen o sorguyu yazıp o var ın içine almana rağmen linq onu çalıştırmıyor store ediyor procedure halinde, daha sonra .List() veya elemanlara ulaşmaya çalıştığın andan itibaren. O yüzden senin kendi yazdığın bir fonksiyonu store procedure hale getirip saklayamıyor. LINQ sorgusunun içinde bu tip kendi fonksiyon çağrılarını property çağrılarını pek yapma. durum = c.Status yap, daha sonra durum u getValue ya yollayıp geri al abi.

    Ah le yar yarr.. adam açıklamış gitmiş.

    benide çok üzdü bu durum. en iyi çözüm aslında select new ile generic object oluşturmak yerine, oluşturduğun bir class'ın properties'lerine yükleyip kullanman. Makina başında geçince konuşuruz.


    herkes programcı olmak zorunda değildir, lütfen bir zorunluluk gibi programlama dilleri öğrenmeye çalışmayın. yabancı dil filan öğrenin amq.// s.kimin etini yerim, kasaba minnet etmem.// ince düşünene kalın girer.//
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    FCN
    FCN's avatar
    Kayıt Tarihi: 28/Eylül/2007
    Erkek
    TeRRoR bunu yazdı
    SpArK bunu yazdı
    FCN bunu yazdı

    status database te  0,1,2  oalrak tutuluyor.

    şu yazdıgım sorgu

       var sorgu = from c in db.main

                                where (c.UserID == calisanid)

                                select new

                                {

                                  projeismi =  c.projects.ProjectName,

                                  uniteismi =  c.units.UnitName,

                                  Binaismi  =  c.builds.BuildName,

                                  isismi =  c.jobs.JobName,

                                  turismi = c.kinds.KindName,

                                  hedefsure =  c.DesTime,

                                  harcanansure =  c.ProcTime,

                                  durum = getValue(c.Status)

                                };

     

    şu getvalue ile döndürdügüm değer .  

      private string getValue(int durum)

            {

                if (durum == 0)

                    return "Bitti";

                else if (durum == 1)

                    return "Bekliyor";

                else

                    return "Başlanmamış";

            }

    verdiği hata 

    LINQ to Entities does not recognize the method 'System.String getValue(Int32)' method, and this method cannot be translated into a store expression.

     

    kısaca bana lazım olan sorgudaki 0 1 2 gelen yeriyi başlanmamış,bekliyor,bitti  gibi değiştirmek.

    foreachle veya list olarak döndürsem sanırım performans kaybı olcak. önerisi olan varmı :|

    Sen o sorguyu yazıp o var ın içine almana rağmen linq onu çalıştırmıyor store ediyor procedure halinde, daha sonra .List() veya elemanlara ulaşmaya çalıştığın andan itibaren. O yüzden senin kendi yazdığın bir fonksiyonu store procedure hale getirip saklayamıyor. LINQ sorgusunun içinde bu tip kendi fonksiyon çağrılarını property çağrılarını pek yapma. durum = c.Status yap, daha sonra durum u getValue ya yollayıp geri al abi.

    Ah le yar yarr.. adam açıklamış gitmiş.

    benide çok üzdü bu durum. en iyi çözüm aslında select new ile generic object oluşturmak yerine, oluşturduğun bir class'ın properties'lerine yükleyip kullanman. Makina başında geçince konuşuruz.

    harbiden kötü bi durummuş.  :'(
    @unbalanced  senin dedigin gibi yaptıgımda tamam convert işlemi olmadıgı için hepsi string olunca bir hata almam fakat. sonra foreachle sorgu içinde döndürüp getvalue ile dönen değeri yazmaya kalktıgımda  readonly hatası alırım gibi geliyor bir ekre yaşamıştım aynı durumu.

     

    neyse işim acil oldugu için şöyle çözdüm durumu şimdilik gride attım. onun rowdatabound eventında 

      if (e.Row.RowType == DataControlRowType.DataRow)

                {

                    string value = e.Row.Cells[7].Text;

                    if (value == "0")

                        e.Row.Cells[7].Text = "bitti";

                    else if (value == "1")

                        e.Row.Cells[7].Text = "devam ediyor";

                    else

                        e.Row.Cells[7].Text = "başlanmamış";

                }

    FCN tarafından 11/Eyl/12 18:56 tarihinde düzenlenmiştir
Toplam Hit: 1209 Toplam Mesaj: 5