c# - LINQ to Entities case sensitive comparison -
this isn't case-sensitive comparison in linq to entities:
thingies.first(t => t.name == "thingamabob"); how can achieve case sensitive comparison linq to entities?
that's because using linq entities convert lambda expressions sql statements. means case sensitivity @ mercy of sql server default has sql_latin1_general_cp1_ci_as collation , not case sensitive.
using objectquery.totracestring see generated sql query has been submitted sql server reveals mystery:
string sqlquery = ((objectquery)context.thingies .where(t => t.name == "thingamabob")).totracestring(); when create linq entities query, linq entities leverages linq parser begin processing query , converts linq expression tree. linq expression tree passed object services api, converts expression tree command tree. sent store provider (e.g. sqlclient), convert command tree native database command text. query executed on data store , results materialized entity objects object services. no logic has been put in between take case sensitivity account. no matter case put in predicate, treat same sql server unless change sql server collates column.
server side solution:
therefore, best solution change collation of name column in thingies table collate latin1_general_cs_as case sensitive running on sql server:
alter table thingies alter column name varchar(25) collate latin1_general_cs_as for more information on sql server collates, take a @ sql server collate case sensitive sql query search
client-side solution:
the solution can apply on client side use linq objects yet comparison doesn't seem elegant:
thingies.where(t => t.name == "thingamabob") .asenumerable() .first(t => t.name == "thingamabob");
Comments
Post a Comment