該SQL選擇未大寫所有名稱:實體框架4:SQL到Linq:如何選擇不是大寫的字符串?
select name
from myTable
where not (UPPER(name) = name collate Latin1_General_BIN)
你會怎麼做同樣認爲LINQ的(實體框架4?)
編輯:
兩個String.Compare
和字符串=串解析爲不區分大小寫的UPPER(name) = name
的SQL。
該SQL選擇未大寫所有名稱:實體框架4:SQL到Linq:如何選擇不是大寫的字符串?
select name
from myTable
where not (UPPER(name) = name collate Latin1_General_BIN)
你會怎麼做同樣認爲LINQ的(實體框架4?)
編輯:
兩個String.Compare
和字符串=串解析爲不區分大小寫的UPPER(name) = name
的SQL。
這不是純粹的LINQ,但是,你需要在詢問ID,即使你只是想名字,你可以使用的executeQuery,如
string sql = @"
select id , name
from myTable
where not (UPPER(name) = name collate Latin1_General_BIN)
";
var results =
(from r in dc.ExecuteQuery<myTable>(sql)
select new { r.Name }
).ToList();
注意。
我不完全明白你想達到的目標。
實體框架和ADO.NET一般來說,有不同的模式比SQL服務器。 如果您想堅持查詢中的語法,請創建一個Stored-Procedures或UDF並將其移植到EF。
我試圖用LINQ來執行它,但我沒有找到辦法,因爲LINQ的EF SQL生成不區分大小寫! 所以我想你必須用UDF或SPROC來做。
UPDATE:
我現在必須離開,但我認爲這篇文章可以幫助你: Unicode characters causing issues in SQL Server 2005 string comparison
您可以使用ToUpper()方法將字符串轉換爲大寫,例如
entities.Where(x => x.Name != x.Name.ToUpper()).Select(x => x.Name)
很顯然,你應該考慮是否需要一個特定的CultureInfo
提供給ToUpper()
方法以及你是否想要做一個特定文化的比較,而不是使用!=
運營商。
問題是沒有整理Latin1_General_BIN,比較不區分大小寫。 WHERE [t0]。[Name] = UPPER([t0]。[Name]) 選擇所有項目不管情況如何。我絕對正在尋找具體的比較文化,這可能是答案。 – 2011-01-11 18:15:41
SP,視圖等很好,但需要增加複雜性。您的代碼解析爲 SELECT [t0]。[Title] FROM [context] AS [t0] WHERE [t0]。[Title] = UPPER([t0]。[Title])不區分大小寫搜索。 – 2011-01-11 18:33:04
@Dr。 Zim,對。我已經更新了我的答案。 – Shimmy 2011-01-11 18:41:07