2012-03-12 75 views

回答

4

由於目標是爲EF表達式被解析成SQL,其中應適用的LIKE斷言,至少有3種方法可以做到這一點,取決於您希望%通配符被放置

C#:

.Where(customer => customer.Name.StartsWith("Bloggs")) 

=> SQL

WHERE c.Name LIKE 'Bloggs%' 

C#:

.Where(customer => customer.Name.Contains("Bloggs")) 

=> SQL

WHERE c.Name LIKE '%Bloggs%' 

C#:

.Where(customer => customer.Name.EndsWith("Bloggs")) 

=> SQL

WHERE c.Name LIKE '%Bloggs' 

如果適用,StartsWith應當優先於第另外兩個,因爲它有更好的機會在列上使用索引。 (%x%通常會導致索引或表掃描)。

+0

我剛剛使用包含,它的工作。如果我不包含startswith並以代碼結束,它會中斷嗎? – CodeNoob 2012-03-13 06:52:14

+0

包含將處理/涵蓋所有情況,但會生成SQL:LIKE'%Bloggs%',通常會導致索引掃描/表掃描。如果你知道你的搜索以一個單詞開始,那麼像'Bloggs%'在SQL中比'%Bloggs%'快(如果它正確編制索引)。 AFAIK EndsWith(即'%Bloggs')對SQL索引不會很有用 – StuartLC 2012-03-13 08:13:14

1

它複製到 - LIKE operator in LINQ How to do SQL Like % in Linq?

通常使用String.StartsWith /的endsWith /包含。例如:

var Code = .Where(p => p.Code.Contains("BALTIMORE")) 
var Code = .Where(p => p.Code.StartsWith("BALTIMORE")) 
var Code = .Where(p => p.Code.EndsWith("BALTIMORE")) 
+0

我剛剛使用包含,它的工作。如果我不包含startswith並以代碼結束,它會中斷嗎? – CodeNoob 2012-03-13 06:30:08