Linq Sorgusu İle İlglili Bir Problem
-
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ı :|
-
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 -
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.
-
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.
-
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
