2012-03-23 42 views
1

我想要做的是:如何在EF中實現sql「%」?

var TheQuery = db.Conventions.Where(p => p.Categories.Contains("%")); 

,但沒有什麼是從數據庫中返回!

+0

可能的重複:http://stackoverflow.com/questions/1033007/like-operator-in-entity-framework – jessehouwing 2012-03-23 10:22:01

+0

該查詢應該返回所有行中有'%'的行。如果這不是你所期望的,你能否更好地解釋你的用例? – 2012-03-23 10:23:33

+0

你是否試圖在'Category'字段的某處找到'%'字符的約定? – paul 2012-03-23 10:23:44

回答

1

我覺得這是你應該做的:

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調用,您可以繼續在其中添加子句,直到您滿意爲止。

+0

問題是我需要爲多個字段(24個其他字段)做這件事 – 2012-03-23 10:37:45

+1

因此添加24個if。它比向數據庫發送過於複雜的查詢要好。 – jessehouwing 2012-03-23 10:40:56

+0

請注意(從我的做法).Any()生成一個巨大的數據庫請求。小心它。 – 2012-03-23 10:51:32

0

SQL「%」?你的意思是什麼時候使用LIKE?如果是這樣只需使用.Contains("Products")帶回類如:

carProducts 
houseProducts2 

即包含將帶回結果,其中類別屬性/字段「包含」字符串,不管是什麼呢兩側。

或者您是否想要分類中包含字符'%'? (您已成功這樣做了)基於對DaveShaw您的評論