我想要做的是:如何在EF中實現sql「%」?
var TheQuery = db.Conventions.Where(p => p.Categories.Contains("%"));
,但沒有什麼是從數據庫中返回!
我想要做的是:如何在EF中實現sql「%」?
var TheQuery = db.Conventions.Where(p => p.Categories.Contains("%"));
,但沒有什麼是從數據庫中返回!
我覺得這是你應該做的:
IQueryable<Convention> query = db.Conventions;
if (!string.IsNullOrWhiteSpace(inputCategory))
{
query = query.Where(p => p.Categories.Contains(inputCategory));
}
if (!string.InNullOrWhiteSpace(inputName))
{
query = query.Where(p=> p.Name == inputName);
}
等
現在如果你想確保你的公約有至少一個類別,你可以改用。任何()
if (string.IsNullOrWhiteSpace(inputCategory))
{
query = query.Where(p => p.Categories.Any());
}
,或者如果它應該有任何類別具有特定名稱
if (!string.IsNullOrWhiteSpace(inputCategory))
{
query = query.Where(p => p.Categories.Any(c => c.Name.Contains(inputCategory));
}
直到您調用ToArray,ToList或ToEnumerable(或任何其他需要客戶端評估的方法)之後纔會執行實際查詢。只要您堅持查詢對象上的純LINQ調用,您可以繼續在其中添加子句,直到您滿意爲止。
問題是我需要爲多個字段(24個其他字段)做這件事 – 2012-03-23 10:37:45
因此添加24個if。它比向數據庫發送過於複雜的查詢要好。 – jessehouwing 2012-03-23 10:40:56
請注意(從我的做法).Any()生成一個巨大的數據庫請求。小心它。 – 2012-03-23 10:51:32
SQL「%」?你的意思是什麼時候使用LIKE?如果是這樣只需使用.Contains("Products")
帶回類如:
carProducts
houseProducts2
即包含將帶回結果,其中類別屬性/字段「包含」字符串,不管是什麼呢兩側。
或者您是否想要分類中包含字符'%'? (您已成功這樣做了)基於對DaveShaw您的評論
可能的重複:http://stackoverflow.com/questions/1033007/like-operator-in-entity-framework – jessehouwing 2012-03-23 10:22:01
該查詢應該返回所有行中有'%'的行。如果這不是你所期望的,你能否更好地解釋你的用例? – 2012-03-23 10:23:33
你是否試圖在'Category'字段的某處找到'%'字符的約定? – paul 2012-03-23 10:23:44