не смог перевести выражение в sql - PullRequest
0 голосов
/ 22 апреля 2011

С приведенным ниже кодом я получаю эту ошибку

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

Как я могу решить это?

1 Ответ

2 голосов
/ 22 апреля 2011

Для тех, кто сталкивается с этой ошибкой или может столкнуться с ней check Пользовательский метод в запросе LINQ to SQL и Вызов функций в запросах 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...