该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