2014-01-07 48 views
0

我想用Like運算符編寫LINQ to SQL查詢,但沒有WildCard運算符。LINQ Like子句 - 沒有通配符運算符

我瞭解以下內容:

包含將equivelent這樣:StartsWith將equivlent到這個LIKE '%B%' :一個像 'B%' 和的endsWith會反之亦然。

Equals可以做到,但「這種方法執行序數(區分大小寫和文化不敏感)比較。」

我現在正在做的方式是這樣的:

var loc = (from l in data.Locations.OrderBy(l => l.LocationName) 
    join s in data.LocationSecurities.Where(s=> s.UserName.ToLower().Equals(userName.ToLower())) on l.LocationID equals s.LocationId 
    select new 
    { 
     LocationId = l.LocationID, 
     Name = l.LocationName 
    } 
    ).Distinct().ToList(); 

但這只是一個變通,因爲我想要做的就是簡單地使用等的equivelent但whitout通配符,這在SQL Server Profiler上清晰可見。

請讓我知道。

預先感謝您。

回答

0

您可以使用:

SqlMethods.Like 

像:

.Where(s => SqlMethods.Like(s.UserName, userName)) 
+0

SqlMethods.Like方法不被編譯器識別;即使這應該是Linq to SQL。 @Dave Bish –

+0

@t_plusplus - 什麼?添加對System.Data.Linq.SqlClient.SqlMethods的引用 –

0

Equals執行「序(區分大小寫和不區分區域性)比較」使用LINQ使用時,不適用到SQL或實體框架,因爲該語句將被轉換爲SQL。
數據庫collation(或列整理如果設置)將決定如何處理"="(Equals)。