无法将表达式转换为sql

本文关键字:sql 转换 表达式 | 更新日期: 2023-09-27 17:52:57

使用下面的代码,我得到这个错误

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;
}

我怎么解决它?

无法将表达式转换为sql

对于那些正在或可能面临并遭受此错误的人查看LINQ查询中的自定义方法和LINQ查询中的调用函数

他们说我们不能在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")