[英]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));
如果geocodes
是IQueryable<>
則可以利用創建可查詢對象所附帶的延遲執行。 您的代碼可能看起來像這樣:
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.