[英]What is the best practice to implement advanced search using Entity Framework?
[英]In Linq for Entity Framework, what is the best practice for returning a resultset by querying multiple columns for a search string?
我正在EF5存儲庫中編寫一個通用搜索查詢,它將在多個列中搜索特定的字符串。
在SQL中,我們僅使用WHERE Col1 LIKE '%string%' OR Col2 LIKE '%string%'
等。
這是我目前擁有的代碼:
var members =
Query()
.Where(
x =>
x.Phone1.Contains(searchText) || x.Email1.Contains(searchText) ||
x.Phone2.Contains(searchText) || x.Email2.Contains(searchText) ||
x.FirstName.Contains(searchText) || x.LastName.Contains(searchText) ||
x.Fax1.Contains(searchText) || x.Username.Contains(searchText) || x.Address.Contains(searchText)
);
return members;
現在,根據我的閱讀,這應該起作用...但是沒有效果。 所以我不得不思考...必須有更好的方法。 可能會進行一些逐步的輸出構建嗎? 但是我不知道如何以一種資源友好的方式實現這一目標。 向正確方向的任何踢動將不勝感激!
如上所述,您需要查詢一個實體。 就像是:
var members = dbContext.YourEntity
.Where(
x =>
x.Phone1.Contains(searchText) || x.Email1.Contains(searchText) ||
x.Phone2.Contains(searchText) || x.Email2.Contains(searchText) ||
x.FirstName.Contains(searchText) || x.LastName.Contains(searchText) ||
x.Fax1.Contains(searchText) || x.Username.Contains(searchText) || x.Address.Contains(searchText)
).ToList();
這與您上面提到的SQL查詢相同。
要對此進行改進,您可能需要重組數據庫。 您可以創建一個關系實體,其中電話號碼位於一個實體中,電子郵件位於另一個實體中,依此類推。 這些將鏈接回到您的成員,然后您將查詢較少的字段(但數據量相同)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.