簡體   English   中英

如何使用WPF和Linq-to-entities模型搜索數據庫

[英]How can I search into database with WPF and Linq-to-entities model

我准備一個WPF項目,在這里我想實施一個更復雜的搜索。 我通過ADO.NET實體模型將LINQ用於實體,並計划在WPFToolkit DataGrid中進行顯示。

我的搜索窗口應允許通過一些不同的條件進行搜索。 我的想法是能夠在應用程序中輸入(例如)名稱,姓氏和職業文本框,並接收所選表中與所有3個搜索參數相對應的所有人員的列表。 我希望能夠在全部輸入或僅輸入一個時進行搜索。

我想另一個選擇是將表單綁定到數據庫...仍然,我不知道如何搜索(我知道如何顯示信息,編輯信息並插入...但不搜索)。

我雖然將字符串應用於查詢機制,但徒勞無功。 似乎不起作用。 請分享一些有關如何執行此操作的想法。 任何源代碼片段都將不勝感激。

謝謝!

Linq使編寫查詢變得非常容易,因此您可以從更簡單的構建塊中構建查詢。 對於這樣的系統,您還可以選擇多種級別。 您可以擁有一個查詢的一般形式為靜態的系統,這是標准的Linq查詢,但是您可以一直使用自定義查詢描述格式,然后將其轉換為Linq語句。

就您而言,您似乎只有幾個可能的過濾器。 您可以這樣做:

var Query = Context.MyDataSet; //Whatever is the standard base query

if (!string.IsNullOrEmpty(NameFilter))
    Query = Query.Where(e => e.Name.Contains(NameFilter));

if (!string.IsNullOrEmpty(SurnameFilter))
    Query = Query.Where(e => e.Surname.Contains(SurnameFilter));

...

var Result = Query.ToList(); 

只要您有一組固定的用戶可以搜索的參數,就可以通過選擇添加過濾器來使用這種構建查詢的方法走得更遠。

好的,這是我得到的最終解決方案,它可以工作。

var sQuery = from x in dataContext.Patients
             select x;
if (!string.IsNullOrEmpty(serName.Text))
    sQuery = sQuery.Where(x => x.Name.Contains(serName.Text));

if (!string.IsNullOrEmpty(serSurame.Text))
    sQuery = sQuery.Where(x => x.Surname.Contains(serSurame.Text));

非常感謝你的幫助!

您可以在數據庫中創建一個搜索表,該表將由普通實體對象上的觸發器填充。 搜索表可以是:EntityTableName,EntityTableID,EntityDescriptionString。 實體描述字符串將是您通過組合相關的可搜索字段在插入實體時生成的。 然后,您將在SQL中使用標准的LIKE查詢,或者在Linq2SQL中使用.Contains。

搜索很難!

您可以用SQL編寫存儲過程來為您執行此操作,然后將其添加到LINQ實體中。

Stored Proc將輸入您的3個參數,然后執行查詢。

要處理該值可能為空字符串(用戶未鍵入任何內容)的情況,您可以添加or子句以將其過濾掉。

SELECT Name, Surname, Occupation FROM tblWhatever
WHERE (@Name = '' OR @Name = Name)
AND (@Surname = '' OR @Surname = Surname)
AND (@Occupation = '' OR @Occupation = Occupation)

我已經有一段時間沒有寫SQL了,所以可能不會馬上運行。 希望你能明白。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM