此代码区分大小写,如何使其不区分大小写?
public IQueryable<FACILITY_ITEM> GetFacilityItemRootByDescription(string description)
{
return this.ObjectContext.FACILITY_ITEM.Where(fi => fi.DESCRIPTION.Contains(description));
}
Run Code Online (Sandbox Code Playgroud) 我已经读过使用ToUpper和ToLower来执行不区分大小写的字符串比较是不明智的,但是在LINQ-to-SQL方面我没有其他选择.LINQ-to-SQL忽略String.Compare的ignoreCase和CompareOptions参数(如果您使用区分大小写的数据库,即使您要求不区分大小写的比较,也会得到区分大小写的比较).ToLower或ToUpper是最好的选择吗?这个比那个好吗?我以为我读过ToUpper更好的地方,但我不知道这是否适用于此.(我正在进行大量的代码审查,每个人都在使用ToLower.)
Dim s = From row In context.Table Where String.Compare(row.Name, "test", StringComparison.InvariantCultureIgnoreCase) = 0
Run Code Online (Sandbox Code Playgroud)
这转换为一个SQL查询,它简单地将row.Name与"test"进行比较,并且不会在区分大小写的数据库上返回"Test"和"TEST".
我正在使用LINQ搜索我的一个Entity Framework表,并根据名称找到一个"组".名称是一个字符串,看起来是Unicode(说它在edmx中).我有一个方法GetGroup(),我传递一个名称来搜索.通过代码调试,我已经在我的数据库中有一个名为"Test"的组.一旦我传入名为"TEST"的组,我希望它返回已经在数据库中的"Test".它出于某种原因,没有找到"测试"并认为"测试"不存在.这是我的查询,我不明白为什么它不起作用.请帮忙.
"name"是组名中传递的..Equals如果gr.Name和名字完全相同,我似乎只能工作.如果一个字符在两个字符串之一中是大写字母,则.Equals不起作用.我试图使用InvariantCultureIgnoreCase,这似乎没有帮助.如果有人询问,MyLeagueId并且LeagueId将始终匹配,则设置数据库,以便可以存在不同联盟ID中的组.我不认为这是问题所在.
Group g = (from gr in this.DatabaseConnection.Groups
where gr.Name.Equals(name, StringComparison.OrdinalIgnoreCase) &&
gr.LeagueId == this.MyLeagueId
select gr).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud) 我想要一个不涉及ToUpper或ToLower的问题的解决方案,正如我在下面的代码中使用的那样;
var upper = term.ToUpper();
using (var db = this.DataContext)
{
return db.Counties.Where(x => x.CountyName.ToUpper().Contains(upper)).ToList();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用有权使用的框架,因此使用的C#解决方案StringComparison.CurrentCultureIgnoreCase不起作用.它的工作Equals,EndsWith和StartsWith,但不是Contains.
为什么我得到一个参数异常,说我将错误数量的参数传递给string.equals方法?
我传递了三个论点,这应该是正确的.实际上它应该抛出编译时错误而不是运行时...
你看到错误吗?
var translations = await (from l in context.Languages
join t in context.Translations on l.ISO639_ISO3166 equals t.ISO639_ISO3166
where string.Equals(l.ApplicationName, applicationName, StringComparison.InvariantCultureIgnoreCase)
select new Translation
{
Key = t.Key,
Text = t.Text
}).ToListAsync();
Run Code Online (Sandbox Code Playgroud)
UPDATE
Test Name: GetTranslations
Test FullName: TaaS.IntegrationTests.Tests.TranslationRepositoryTests.GetTranslations
Test Source: C:\test\TaaS-WebApplication\TaaS.IntegrationTests\Tests\TranslationRepositoryTests.cs : line 17
Test Outcome: Failed
Test Duration: 0:00:00,0473367
Result StackTrace:
at System.Linq.Expressions.Expression.GetMethodBasedBinaryOperator(ExpressionType binaryType, Expression left, Expression right, MethodInfo method, Boolean liftToNull)
at System.Linq.Expressions.Expression.Equal(Expression left, Expression right, Boolean liftToNull, MethodInfo method)
at System.Data.Entity.Core.Objects.ELinq.LinqExpressionNormalizer.VisitMethodCall(MethodCallExpression m)
at System.Linq.Expressions.EntityExpressionVisitor.Visit(Expression …Run Code Online (Sandbox Code Playgroud) 如何根据情况使LINQ区分大小写并且不区分大小写?
我正在使用sql server 2008和Entity Framework 4.0.
我更改了COLLATION以使SQL Server区分大小写.所以对于这样的场景:
query = query.Where(x => x.Username == username);
Run Code Online (Sandbox Code Playgroud)
它很棒.但是,当按主题(或名称或类似)搜索时,我需要能够从db 忽略大小写中提取数据,如下所示:
query = query.Where(x => (x.Name.Contains(Name)));
Run Code Online (Sandbox Code Playgroud)
当记录是"TestString"并且我正在寻找"测试"或"测试"或类似时,它不起作用.我如何才能使它在文本中找到文本或字符串的一部分?谢谢
我有一个Entity Framework实体,其字符串属性名为Description.
搜索Description包含字符串的所有实体非常简单:
var res = from u ctx.Users where u.Description.contains(str) select u;
Run Code Online (Sandbox Code Playgroud)
但是假设我想支持不区分大小写的搜索?
我正在验证数据库中的用户名(不区分大小写)和密码(区分大小写)
我正在使用Entity Framework 5.0与数据库进行交互
在数据库中密码是
"0x11A46971EFF1E1A2CA228CF592CA37DC77E7CCF759602D53629C22B693AEEE96CCD9F889D8E9A92C19391E6BD2DD07E741E9B7AA07E391ACDC939B993C9D7F5D"
当我将密码的大小写更改为ie时,我期望为我的后续代码块返回null
"0x11a46971eff1e1a2ca228cf592ca37dc77e7ccf759602d53629c22b693aeee96ccd9f889d8e9a92c19391e6bd2dd07e741e9b7aa07e391acdc939b993c9d7f5d"
但它不会失败并返回适当的用户实体.
using (var context = new MyDbContext(ConnectionString))
{
return context.Users.Where(x => (x.Name.Equals(userName, StringComparison.OrdinalIgnoreCase) && x.Password.Equals(password))).FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
然而,如果我得到所有用户然后比较它给出正确的输出,即user == null
using (var context = new MyDbContext(ConnectionString))
{
var users = context.Users.ToList();
return users.Where(x => (x.Name.Equals(userName,StringComparison.OrdinalIgnoreCase) && x.Password.Equals(password))).FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
这很奇怪?为什么会这样?如何从LINQ中将区分大小写的查询写入SQL?
我有以下代码来创建静态元素列表并通过Id检索它们:
Private Shared Property SubStructTypes As IList(Of SubstructureType)
Shared Sub New()
SubStructTypes = New List(Of SubstructureType) From {
New SubstructureType With {.Id = "PURLIN", .Description = "Purlin"},
New SubstructureType With {.Id = "METALDECKING", .Description = "Metal Decking"},
New SubstructureType With {.Id = "WOODDECKING", .Description = "Wood Decking"}
}
End Sub
Public Shared Function GetById(ByVal myId As String) As SubstructureType
If String.IsNullOrWhiteSpace(myId) Then
Return Nothing
End If
Dim straightCompare = SubStructTypes.SingleOrDefault(Function(subStruct) subStruct.Id = myId)
Dim howIsThisFindingAnything = SubStructTypes.SingleOrDefault(Function(subStruct) subStruct.Id.ToUpper() = myId.ToLower()) …Run Code Online (Sandbox Code Playgroud) 我只想在确切的密码和大小写匹配时才想要用户对象.但是,即使密码的大小写不同,此查询也会获取结果:
db.Users.Where(u => u.Username.ToLower() == username.ToLower() &&
u.Password == password).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
我错过了什么?