Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

collation conflict

Is there any one who knows how we can solve collation issue in select linq query? I'm getting this error when I want to select data in linq.

Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation

var lstData = from s in dataTrackDB.datas
              join b in dataTrackDB.brandDatas on i.brandcode equals b.brandcode
              join b in dataTrackDB.brandDatas on i.brandcode equals b.brandcode
              join b in dataTrackDB.brandDatas on i.brandcode equals b.brandcode
              join m in dataTrackDB.mktDatas on s.mktcode equals m.mktcode
              select new dataView { 
                  Account=m.account,
                  brandcode=b.brandcode,
                  commodity=s.commodity,
                  date=s.date,
                  daysvalid=s.daysvalid,
                  mfrcode=b.mfrcode,
                  mktcode=s.mktcode,
                  price=s.price,
                  prodid=s.prodid,
                  statecode=s.statecode,
                  subcommodity=s.subcommodity,
                  supprecode=s.supprecode,
                  units =s.units 
              };

lstData = lstData.AsQueryable().Where(x => x.mfrcode == mfr );

return lstData.Take(100).ToList();
like image 677
Naseem Avatar asked Feb 09 '10 00:02

Naseem


People also ask

What is a collation conflict in SQL?

In Microsoft SQL Server, the collation can be set at the column level. When you compare (or concatenate) two columns having different collation in a query, this error occurs: Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "French_CI_AS" in the equal to operation. —

How do you resolve a collation conflict in a union?

You can resolve the issue by forcing the collation used in a query to be a particular collation, e.g. SQL_Latin1_General_CP1_CI_AS or DATABASE_DEFAULT. In the above query a. MyID and b. YourID would be columns with a text-based data type.

What is collate SQL_Latin1_General_CP1_CI_AS in select statement?

The collate clause is used for case sensitive and case insensitive searches in the columns of the SQL server. There are two types of collate clause present: SQL_Latin1_General_CP1_CS_AS for case sensitive. SQL_Latin1_General_CP1_CI_AS for case insensitive.

What is the difference between SQL_Latin1_General_CP1_CI_AS and Latin1_General_CI_AS?

The SQL_Latin1_General_CP1_CI_AS collation is a SQL collation and the rules around sorting data for unicode and non-unicode data are different. The Latin1_General_CI_AS collation is a Windows collation and the rules around sorting unicode and non-unicode data are the same.


1 Answers

The problem is not in Linq but in your database

you can for example create a view that joins that way and the select the data in linq from the view

SELECT * FROM T1
INNER JOIN T2 ON 
T1.Name COLLATE Latin1_General_CI_AS = T2.Name COLLATE Latin1_General_CI_AS

or select the data first in linq2sql separately for each table and then join it with linq2object

like image 157
gsharp Avatar answered Nov 15 '22 17:11

gsharp