2011-01-11 23 views

回答

1

這不是純粹的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(); 

注意。

1

我不完全明白你想達到的目標。

實體框架和ADO.NET一般來說,有不同的模式比SQL服務器。 如果您想堅持查詢中的語法,請創建一個Stored-Procedures或UDF並將其移植到EF。

我試圖用LINQ來執行它,但我沒有找到辦法,因爲LINQ的EF SQL生成不區分大小寫! 所以我想你必須用UDF或SPROC來做。

UPDATE:

我現在必須離開,但我認爲這篇文章可以幫助你: Unicode characters causing issues in SQL Server 2005 string comparison

+0

SP,視圖等很好,但需要增加複雜性。您的代碼解析爲 SELECT [t0]。[Title] FROM [context] AS [t0] WHERE [t0]。[Title] = UPPER([t0]。[Title])不區分大小寫搜索。 – 2011-01-11 18:33:04

+0

@Dr。 Zim,對。我已經更新了我的答案。 – Shimmy 2011-01-11 18:41:07

1

您可以使用ToUpper()方法將字符串轉換爲大寫,例如

entities.Where(x => x.Name != x.Name.ToUpper()).Select(x => x.Name) 

很顯然,你應該考慮是否需要一個特定的CultureInfo提供給ToUpper()方法以及你是否想要做一個特定文化的比較,而不是使用!=運營商。

+0

問題是沒有整理Latin1_General_BIN,比較不區分大小寫。 WHERE [t0]。[Name] = UPPER([t0]。[Name]) 選擇所有項目不管情況如何。我絕對正在尋找具體的比較文化,這可能是答案。 – 2011-01-11 18:15:41

相關問題