2011-01-11 22 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