2015-11-03 56 views
0

我現在有這個LINQ聲明..Linq的語句來選擇具有多個可選字段加入

Dim results = (From pb In db.ParcelBases 
       Join l In db.LegalDescs On pb.lrsn Equals l.LRSN 
       Join sh In db.SalesHists On pb.lrsn Equals sh.lrsn 
       Where sh.sale_date >= dateFrom 
       Where sh.sale_date <= dateTo 
       Where sh.sale_amt >= psfldLow 
       Where sh.sale_amt <= psfldHigh 
       Select New With { 
       pb.lrsn, 
       pb.prop_street, 
       pb.owner1, 
       l.LEG_DESCRIPTION, 
       pb.parcel_id 
       }).ToList 

不過,我有大約7,我需要搜索以及可選字段。做這個的最好方式是什麼?我將不得不檢查這些字段是否爲空,併爲每個檢查創建一個聲明?或者有沒有辦法在聲明本身內部做到這一點?目前在聲明中的那些是最低選擇所需的必填字段。

更新:我試圖完成這樣的事情..

Dim results = (From pb In db.ParcelBases 
       Join l In db.LegalDescs On pb.lrsn Equals l.LRSN 
       Join sh In db.SalesHists On pb.lrsn Equals sh.lrsn 
       Where sh.sale_date >= dateFrom 'required field 
       Where sh.sale_date <= dateTo 'required field 
       Where sh.sale_amt >= psfldLow 'required field 
       Where sh.sale_amt <= psfldHigh 'required field 
       Where pb.propcity = tbPropCity 'optional field-could be null 
       Where pb.proptype = tbPropType 'optional field-could be null 
       Select New With { 
       pb.lrsn, 
       pb.prop_street, 
       pb.owner1, 
       l.LEG_DESCRIPTION, 
       pb.parcel_id 
       }).ToList 

回答

0

你的意思是一個Or語句,如:

Dim results = (From pb In db.ParcelBases 
       Join l In db.LegalDescs On pb.lrsn Equals l.LRSN 
       Join sh In db.SalesHists On pb.lrsn Equals sh.lrsn 
       Where (sh.sale_date >= dateFrom 
       And (sh.sale_date <= dateTo) 
       And (sh.sale_amt >= psfldLow) 
       And (sh.sale_amt <= psfldHigh) 
Or (tbPropCity <> Nothing and pb.propcity = tbPropCity) ' check for nulls here if necessary or something else Or... etc.) 
        Select New With { 
        pb.lrsn, 
        pb.prop_street, 
        pb.owner1, 
        l.LEG_DESCRIPTION, 
        pb.parcel_id 
        }).ToList 

至少聽起來,你在找什麼

+0

嗯,八九不離十。我還有7個文本框需要查詢,但它們是可選的。聲明中的那些是必填字段。我會稍微更新一下我的問題。 – Humpy

+0

我已經更新了我的問題,包括兩個可選字段。 – Humpy

+0

嗯,它仍然是它的組合And和Or的 – Dalorzo

0

您可以使用可選字段創建視圖模型。

public class Thing { 
    public type lrsn {get;set;} 
    public type prop_street {get;set;} 
    public type owner1 {get;set;} 
    public type LEG_DESCRIPTION {get;set;} 
    public type? propcity {get;set;} 
    public type? proptype {get;set;} 

    public Thing(
     type lrsn, 
     type prop_street, 
     type owner1, 
     type LEG_DESCRIPTION, 
     type? propcity = null, 
     type? proptype = null) 
    { 
     this.lrsn = lrsn; 
     this.prop_street = prop_street; 
     this.owner1 = owner1; 
     this.LEG_DESCRIPTION; 
     this.propcity = propcity; 
     this.proptype = proptype; 
    } 
} 

然後無論你的代碼是:

using namespace.Thing; 

Dim results = (From pb In db.ParcelBases 
      Join l In db.LegalDescs On pb.lrsn Equals l.LRSN 
      Join sh In db.SalesHists On pb.lrsn Equals sh.lrsn 
      Where sh.sale_date >= dateFrom 
      Where sh.sale_date <= dateTo 
      Where sh.sale_amt >= psfldLow 
      Where sh.sale_amt <= psfldHigh 
      Select New Thing(
      pb.lrsn, 
      pb.prop_street, 
      pb.owner1, 
      l.LEG_DESCRIPTION, 
      pb.parcel_id 
      )).ToList