我在Microsoft Report Viewer组件的网页上收到此错误:
报告期间发生错误 处理。本地序列不能 用于LINQ to SQL的实现 查询运算符,包含Contains 操作
我的代码:
public static IEnumerable GetUrunMiktarliDetayli()
{
Baglanti();
List<StokEnvanteriSatiri> urunListesi = new List<StokEnvanteriSatiri>();
urunListesi = GetUrunListesiDoldur();
var urunStok = from urunS in urunListesi
select new
{
urunS.AcilisMiktari,
urunS.MevcutMiktar,
urunS.UrunNo
};
var urunMD = from urun in db.TBLP1URUNs
join kategori in db.TBLP1URUNKATEGORIs
on urun.KATEGORIID equals kategori.ID
join a in urunStok
on urun.ID equals a.UrunNo
select new
{
DIGERGIRISLER = a.AcilisMiktari,
urun.URUNADI,
urun.URUNACIKLAMA,
kategori.TREENAME,
urun.STOKTURU,
urun.MARKA,
urun.MODEL,
urun.URUNTIPI,
urun.URUNDURUM,
urun.KRITIKSTOKMIKTARI,
urun.DEPOADI,
urun.YER,
urun.RAF,
urun.RAFOMRU,
KDVDAHILMI = urun.KDVDAHILMI==1 ? "EVET":"HAYIR",
urun.KDVORANI,
urun.SATFIYAT1,
urun.SATFIYAT1BIRIM,
urun.TEDFIYAT1,
urun.TEDFIYAT1BIRIM,
urun.HIZMETYENSURYIL,
urun.HIZMETYENSURAY,
urun.SATILANMIKTAR,
urun.IADEEDILENMIKTAR,
urun.KULLANILANMIKTAR,
urun.ZAYIMIKTAR,
urun.KONSINYECIKISMIKTAR,
urun.DIGERCIKISLAR,
urun.TEDARIKMIKTAR,
urun.IADEALINANMIKTAR,
urun.KONSINYEGIRISMIKTAR,
urun.EN,
urun.BOY,
urun.YUKSEKLIK,
urun.AGIRLIK,
urun.BOYUTAGIRLIGI,
urun.URUNKAYITTARIHI,
urun.GARANTISURESIBITIS,
urun.SONGUNCELLEMETARIHI,
urun.YENI,
urun.TESLIMATSURESI,
urun.TEDARIKCISTOKMIKTAR,
}
;
return urunMD;
}
public class StokEnvanteriSatiri
{
private string urunNo;
private string urunAdi;
private int acilisMiktari;
private int toplamTedarikMiktari;
private int toplamSatisMiktari;
private int mevcutMiktar;
private decimal satisFiyati;
private decimal toplamTutar;
private string paraBirimi;
public string UrunNo
{
get { return urunNo; }
set { urunNo = value; }
}
public string UrunAdi
{
get { return urunAdi; }
set { urunAdi = value; }
}
public int AcilisMiktari
{
get { return acilisMiktari; }
set { acilisMiktari = value;}
}
public int ToplamTedarikMiktari
{
get { return toplamTedarikMiktari; }
set { toplamTedarikMiktari = value; }
}
public int ToplamSatisMiktari
{
get { return toplamSatisMiktari; }
set { toplamSatisMiktari = value; }
}
public int MevcutMiktar
{
get { return mevcutMiktar; }
set { mevcutMiktar = value; }
}
public decimal SatisFiyati
{
get { return satisFiyati; }
set { satisFiyati = value; }
}
public decimal ToplamTutar
{
get { return toplamTutar; }
set { toplamTutar = value; }
}
public string ParaBirimi
{
get { return paraBirimi; }
set { paraBirimi = value; }
}
}
此方法GetUrunListesiDoldur()
基本上返回List<StokEnvanteriSatiri>
StokEnvanterSatiri
列表,我知道问题是我正在尝试使用SQL表加入内存列表。
有没有办法解决这个问题?
答案 0 :(得分:7)
我基本上颠倒了join
并且它有效
var urunMD = from urunStokbilgileri in urunStok
join urun in db.TBLP1URUNs
on urunStokbilgileri.UrunNo equals urun.ID
join kategori in db.TBLP1URUNKATEGORIs
on urun.KATEGORIID equals kategori.ID
......
答案 1 :(得分:3)
您必须强制LINQ在本地评估第二个连接。你可以这样做:
var urunMD = (from urun in db.TBLP1URUNs
join kategori in db.TBLP1URUNKATEGORIs
on urun.KATEGORIID equals kategori.ID).AsEnumerable()
.Join( [...] )
答案 2 :(得分:2)
重写urunMD
查询以分为两部分运行。使用Contains
运算符过滤TBLP1URUNs
中的初始记录,然后仅返回数据库数据。然后使用单独的LINQ-to-Objects查询将TBLP1URUNs
中的数据库数据与urunStok
中的内存数据相结合。