簡體   English   中英

在Linq for 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.

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