簡體   English   中英

將“ WHERE”查詢與LINQ結合

[英]Combine “WHERE” queries with LINQ

在常規SQL中,我可以編寫一個查詢,例如

select * from geocodes where NAME='somename' and STATE='somestate'

但是在LINQ中,我不知道該怎么做。 我想為我使用LINQ的以下單個查詢編寫一些組合查詢:

if (!String.IsNullOrEmpty(searchString))
        {
            switch (searchBy)
            {
                case "Name":
                    geocodes = geocodes.Where(s => s.NAME.Contains(searchString));
                    break;
                case "Site":
                    geocodes = geocodes.Where(s => s.CFN_SITE.Contains(searchString));
                    break;
                case "Address":
                    geocodes = geocodes.Where(s => s.STREET1.Contains(searchString));
                    break;
                case "City":
                    geocodes = geocodes.Where(s => s.CITY.Contains(searchString));
                    break;
                case "State":
                    geocodes = geocodes.Where(s => s.STATE_CODE.Contains(searchString));
                    break;
                case "Acct":
                    geocodes = geocodes.Where(s => s.AccountNumber.Contains(searchString));
                    break;
            }

        }

使用&&邏輯AND運算符:

geoCodes = geoCodes.Where(s => s.Name.Contains(someName) && s.State.Contains(someState));

如果geocodesIQueryable<>則可以利用創建可查詢對象所附帶的延遲執行。 您的代碼可能看起來像這樣:

if(searchByName) //Some boolean value to indicate you are searching the name
{
    geocodes = geocodes.Where(s => s.NAME.Contains(searchString));
}

if(searchBySite)
{
    geocodes = geocodes.Where(s => s.CFN_SITE.Contains(searchString));
}

if(searchByAddress)
{
    geocodes = geocodes.Where(s => s.STREET1.Contains(searchString));
}

//etc...

您的查詢實際上不會發送到數據庫,因為您純粹是在構建它。 僅當您通過枚舉結果(通過調用ToList()或對其進行循環ToList()實現數據時,實體框架才會構建所需的SQL

暫無
暫無

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

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