[英]Combining two LINQ statments into one
嗨,我有一些要運行的LINQ代碼,但條件取決於我傳遞給函數的國家/地區變量是否為null。
因此,如果國家/地區變量為null,我想運行:-
var resorts = from r in db.WRESORT
where new[] { "AUSTRIA", "FRANCE", "ITALY" }.Contains(r.COUNTRY)
如果國家具有價值,我想經營
var resorts = from r in db.WRESORT where r.COUNTRY == country
問題是,是否有辦法將2條語句組合為一個?
謝謝
您可以使用檢查country
是否有價值,然后使用country
創建數組,否則使用預定義列表創建
var arr = string.IsNullOrEmpty(country)
? new[] { "AUSTRIA", "FRANCE", "ITALY" }
: new[] { country };
var resorts = from r in db.WRESORT where arr.Contains(r.COUNTRY);
可能是這個嗎?:
var resorts = from r in db.WRESORT
where (country != null && r.COUNTRY == country) ||
(country == null && new[] { "AUSTRIA", "FRANCE", "ITALY" }.Contains(r.COUNTRY))
如果確實必須將其作為單個查詢完成,則:
var resorts = from r in db.WRESORT
where (
country == null ? new[] { "AUSTRIA", "FRANCE", "ITALY" } : new[]{country})
.Contains(r.COUNTRY);
但是為什么不呢?
var resorts = country == null
? from r in db.WRESORT
where (new[] { "AUSTRIA", "FRANCE", "ITALY" }.Contains(r.COUNTRY)
: from r in db.WRESORT where r.COUNTRY == country;
許多數據庫和其他提供程序使用一次相等性檢查( =
)會比包含( IN (…)
)做得更好,並且由於查詢的類型將是相同的,所以這將起作用並產生查詢相同類型的。 代碼分支發生在linq-y位之外有什么危害?
在這種情況下,您也可以閱讀更多:
IQueryable<Resort> resorts;
if(country == null)
resorts = from r in db.WRESORT
where (new[] { "AUSTRIA", "FRANCE", "ITALY" }.Contains(r.COUNTRY);
else
resorts = from r in db.WRESORT where r.COUNTRY == country;
因為IQueryable
的類型參數不是匿名的。 如果您使用的是.Select(r => new{r.COUNRY, r.Name})
那將是不可能的。
路口:
var resorts =
from r in db.WRESORT
where new[] { "AUSTRIA", "FRANCE", "ITALY" }.Contains(r.COUNTRY) && r.COUNTRY == country;
要么
聯盟:
var resorts = from r in db.WRESORT
where new[] { "AUSTRIA", "FRANCE", "ITALY" }.Contains(r.COUNTRY) || r.COUNTRY == country;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.