Linq IQueryable方法与join方法一起使用

时间:2017-07-17 08:10:58

标签: c# linq stored-procedures iqueryable

这是我的带连接的linq代码 - 我的第一个类是主表(SKontrat),其他类与SKontrat类有关系:

var result = from k in SKontrat()
              join kk in SKontratKalem() on k.ID equals kk.UstID
              join m in SKontratMasraflari() on k.ID equals m.KontratID
              join s in SKontratSatisSekli() on k.ID equals s.KontratID
              join tb in SKontratTarihBaglantilar() on k.ID equals tb.KontratID
              join gp in SKontratGP() on k.ID equals gp.KontratID
              select new
                     {
                         k.ID,
                         k.Tip,
                         k.KontratNo,
                         BagliOlduguEvrakNo = db.BagliOlduguKontratlarGetir(k.ID),
                         k.FirmaIsmi,
                         k.InspektorAdi,
                         k.PlasiyerAdi,
                         k.Not1,
                         k.Not2,
                         k.Not3,
                         k.DovizBirim,
                         Miktar = SKontratKalem().Sum(q => q.Miktar),
                         TahminiGenelToplam = db.SiparisRaporuTahminiGenelToplam(k.ID, Convert.ToInt32(kk.MusteriID), Convert.ToInt32(kk.TedarikciID)),
                         GercekGenelToplam = db.SiparisRaporuGercekGenelToplam(k.ID, Convert.ToInt32(kk.MusteriID), Convert.ToInt32(kk.TedarikciID)),
                         GpGercekKdvliTutar = db.GpGercekKdvliTutar(k.ID, Convert.ToDecimal(txtBrutToplamGelirGPKdvli1.Text), Convert.ToDecimal(txtBrutToplamGelirGPKdvli2.Text), txtBrutToplamGelirGPKdvsizBirim.Text),
                         GpTahminiKdvliTutar = db.GpTahminiKdvliTutar(k.ID, Convert.ToDecimal(txtBrutToplamGelirGPKdvli1.Text), Convert.ToDecimal(txtBrutToplamGelirGPKdvli2.Text), txtBrutToplamGelirGPKdvsizBirim.Text),
                         TarihBaglantiDurum = tb.TDosyaKapandi.Value.ToString() != "" || tb.TDosyaKapandi != null ? "Dosya Kapandı" : "Beklemede",
                         k.KayitTarihi,
                         k.MarkalamaTarihi,
                         k.TeslimSekli,
                         k.IrsaliyeSekli,
                         OperasyonTarihi = tb.Operasyonda,
                         DosyaKapandi = tb.TDosyaKapandi,
                         SevkiyatTarihi = tb.SevkiyatGerceklesen,
                         k.KayitYapanKullanici,
                         k.KayitTarihi_DB,
                         k.DuzenlemeYapanKullanici,
                         k.DuzenlemeTarihi_DB
                     };

grSonuclar.DataSource = result.ToList();

这里是IQueryable类之一:

private IQueryable<KontratUst> SKontrat()
{
        var _result = PredicateBuilder.True<KontratUst>();

        _result = _result.And(x => x.Tip == KontratTipi);
        _result = _result.And(x => x.Silindi == 0);

        if (txtFirmaIsmi.Text != string.Empty)
            _result = _result.And(x => x.FirmaIsmi.Contains(txtFirmaIsmi.Text));

        if (txtKayitTarihi1.Text != string.Empty && txtKayitTarihi2.Text != string.Empty)
            _result = _result.And(x => x.KayitTarihi >= txtKayitTarihi1.DateTime && x.KayitTarihi <= txtKayitTarihi2.DateTime);
        else if (txtKayitTarihi1.Text != string.Empty)
            _result = _result.And(x => x.KayitTarihi >= txtKayitTarihi1.DateTime);
        else if (txtKayitTarihi2.Text != string.Empty)
            _result = _result.And(x => x.KayitTarihi <= txtKayitTarihi2.DateTime);

        if (txtKayitTarihi1.Text != string.Empty && txtMarkalamaTarihi2.Text != string.Empty)
            _result = _result.And(x => x.MarkalamaTarihi >= txtMarkalamaTarihi1.DateTime && x.MarkalamaTarihi <= txtMarkalamaTarihi2.DateTime);
        else if (txtMarkalamaTarihi1.Text != string.Empty)
            _result = _result.And(x => x.MarkalamaTarihi >= txtMarkalamaTarihi1.DateTime);
        else if (txtMarkalamaTarihi2.Text != string.Empty)
            _result = _result.And(x => x.MarkalamaTarihi <= txtMarkalamaTarihi2.DateTime);

        if (txtContractTarihi1.Text != string.Empty && txtMarkalamaTarihi2.Text != string.Empty)
            _result = _result.And(x => x.KontratTarihi >= txtContractTarihi1.DateTime && x.KontratTarihi <= txtContractTarihi2.DateTime);
        else if (txtContractTarihi1.Text != string.Empty)
            _result = _result.And(x => x.KontratTarihi >= txtContractTarihi1.DateTime);
        else if (txtContractTarihi2.Text != string.Empty)
            _result = _result.And(x => x.KontratTarihi <= txtContractTarihi2.DateTime);

        if (txtPlasiyerAdi.Text != string.Empty)
            _result = _result.And(x => x.PlasiyerAdi.Contains(txtPlasiyerAdi.Text));
        if (txtYardimciPlasiyer.Text != string.Empty)
            _result = _result.And(x => x.YardimciPlasiyerAdi.Contains(txtYardimciPlasiyer.Text));
        if (txtYardimSekli.Text != string.Empty)
            _result = _result.And(x => x.YardimSekli.Contains(txtYardimSekli.Text));
        if (txtMusteriTemsilcisi.Text != string.Empty)
            _result = _result.And(x => x.MusteriTemsilcisi.Contains(txtMusteriTemsilcisi.Text));
        if (txtInspektorAdi.Text != string.Empty)
            _result = _result.And(x => x.InspektorAdi.Contains(txtInspektorAdi.Text));

        var _return = db.KontratUsts.Where(_result);

        return _return;
 }

我收到这样的错误:

  

发生FormatException:输入字符串的格式不正确。

0 个答案:

没有答案