使用以下代码我收到此错误
InvalidOperationException
:
无法翻译表达式
stok_getmiktar_byyapilanislem(urunler.ID, "SATIS")
进入SQL而无法对待 它作为一种本地表达。
var urundb = (from urunler in db.TBLP1URUNs
orderby urunler.SERIAL
where (urunler.ID.Contains(FilitreText) || urunler.URUNADI.Contains(FilitreText))
&& ((kategori1.SERIAL == null) || urunler.SERIAL.StartsWith(kategori1.SERIAL))
select new
{
UrunNo = urunler.ID,
UrunAdi = urunler.URUNADI,
Marka = urunler.MARKA,
SatisFiyati = urunler.SATFIYAT1.GetValueOrDefault(0),//.ToString() + " " + urunler.SATFIYAT1BIRIM,
TedarikFiyati = urunler.TEDFIYAT1.GetValueOrDefault(0),//.ToString() + " " + urunler.TEDFIYAT1BIRIM,
PiyasaFiyati = urunler.SATFIYAT2.GetValueOrDefault(0),//.ToString() + " " + urunler.SATFIYAT2BIRIM,
Hizmet = (urunler.HIZMETYENSURYIL > 0 && urunler.HIZMETYENSURAY > 0 ?
urunler.HIZMETYENSURYIL.ToString() + " Yıl " + urunler.HIZMETYENSURAY.ToString() + " Ay"
: (urunler.HIZMETYENSURYIL > 0 && urunler.HIZMETYENSURAY <= 0 ?
urunler.HIZMETYENSURYIL.ToString() + " Yıl"
: (urunler.HIZMETYENSURYIL <= 0 && urunler.HIZMETYENSURAY > 0 ?
urunler.HIZMETYENSURAY.ToString() + " Ay"
: ""))),
TedarikEdilenMiktar = DAOUrun.stok_getmiktar_byyapilanislem(urunler.ID, "TEDARIK"),//this one works fine
SatilanMiktar = DAOUrun.stok_getmiktar_byyapilanislem(urunler.ID, "SATIS"),//this one works fine
Stok = urunler.TEDARIKCISTOKMIKTAR.GetValueOrDefault(0)
- DAOUrun.stok_getmiktar_byyapilanislem(urunler.ID, "SATIS")//error occurs with this one
});
下面的是stok_getmiktar_byyapilanislem
public static double stok_getmiktar_byyapilanislem(string urun_id, string yapilanislem)
{
VeriyazDBDataContext db = new VeriyazDBDataContext(); db.Connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
double miktar = (from rows in db.TBLP1ISLEMDETAYs
where rows.URUN_ID == urun_id && rows.TBLP1ISLEM.YAPILANISLEM == yapilanislem
select rows.MIKTAR).Sum().GetValueOrDefault(0);
return miktar;
}
我该如何解决?
答案 0 :(得分:2)
对于那些可能遇到或遭受此错误的人 检查Custom Method in LINQ to SQL query和Calling functions in LINQ queries
他们说我们不能在linq中调用我们自己的函数/方法,实际上我们可以但是当我尝试从该查询中获取某些内容时,它会在我的问题中抛出引用的异常。我真的很想知道为什么会这样做
SatilanMiktar = DAOUrun.stok_getmiktar_byyapilanislem(urunler.ID, "SATIS"),
有效,但这个没有
Stok = urunler.TEDARIKCISTOKMIKTAR.GetValueOrDefault(0) - DAOUrun.stok_getmiktar_byyapilanislem(urunler.ID, "SATIS")
我刚写了一些像这样的其他方法:
public static double GetMevcutMiktar(string urunId,double acilisMiktari)
{
double mevcutMiktar = 0;
mevcutMiktar = acilisMiktari - stok_getmiktar_byyapilanislem(urunId, "SATIS")
return mevcutMiktar;
}
而不是
urunler.TEDARIKCISTOKMIKTAR.GetValueOrDefault(0) - DAOUrun.stok_getmiktar_byyapilanislem(urunler.ID, "SATIS")