2012-04-25 288 views
0

我有一個應用程序可以搜索我們的數據庫(通過EF公開)來查找滿足特定條件的記錄。我們有兩個主表(工作和收件人)。收件人通過作業ID鏈接到作業表。查詢中的Where子句

作業記錄包含各種字段(處理日期,名稱,作業類型)。收件人有很多姓名和ID字段(例如帳號,姓氏等)

我想要顯示一個搜索屏幕,他們在哪裏看到要搜索的字段列表。 ASP.net代碼會查看用戶輸入(或選定)哪個文本框,並基於該文本構建查詢。

我只是試圖找到最有效的方式。

粗糙的邏輯是:

if not string.isnullorempty(txtName.text) then 
     'Query.Where.Add clause = " AND Name like '@txtName' 
     'Query.WhereParameters.Add("@txtName",txtNAme.text 
    end if 

if not string.isnullorempty(txtAccountNumber.text) then 

.....etc 


if not string.isnullorempty(txtFromDate.text) then.. 

如果我堅持是搞清楚如何在更多的where子句添加。我應該只使用Entity SQL嗎?

這可以返回強類型的EF對象嗎?是否有可能返回作業和收件人對象?

例如如果我做了一個選擇收件人。 ,工作。 from .... blah這個解析是否正確並返回鏈接的Recipient和Job對象?

回答

2

如果您從強類型未篩選查詢開始,則可以使用Queryable.Where添加篩選。

Name = txtName.Text 
If Not String.IsNullOrEmpty(Name) Then 
    Query = Query.Where(Function(j) j.Name.Contains(Name)) 
End If 

如果未經過濾的查詢鏈接正確的多個記錄,這些鏈接會在您添加過濾器保存。

(免責聲明:我不經常使用VB.NET,有可能是愚蠢的語法錯誤,但你應該能夠得到的總體思路)

+0

所以,如果我保持通話query.where並添加新的函數,它們會被類似於SQL中的「和」嗎? E.g name = john和date = @date。有沒有辦法指定他們作爲or加入? – Dane 2012-04-25 07:51:22

+0

1)是的。 (請記住'Query ='部分,不要只調用Query.Where'並忽略結果。)從概念上講,Query = Query.Where(a).Where(b).Where(c)'does(僞代碼)Query =(select * from(select * from(select * from Query where a)where b)where c)',but that results with results'Query =(select * from Query where && b && c)',EF通常會這樣翻譯它。 2)你可以使用'聯合'這個。 Query.Where(a).Union(Query.Where(b))'給出與Query.Where(a‖b)'相同的結果。 – hvd 2012-04-25 08:01:19