نمایش نتایج 1 تا 8 از 8

نام تاپیک: برطرف خطای Collation در LINQ

  1. #1
    کاربر دائمی آواتار sanay_esh
    تاریخ عضویت
    تیر 1386
    محل زندگی
    برنامه نویس !
    سن
    39
    پست
    449

    برطرف خطای Collation در LINQ

    با سلام

    جدول A را با Collation Arabic_CI_AS دارم و جدول B را با Collation SQL_Latin1_General_CP1256_CI_AS دارم
    مشکل اینجاست که وقتی LINQ بین این دو جدول بر اساس کلید ارتباطی زده میشود

    from a in DataContext.A
    join a in DataContext.B on a.af equals b.bf
    select new { a,b.bf }



    این خطا نمایش داده میشود

    Cannot resolve the collation conflict between "Arabic_CI_AS" and  "SQL_Latin1_General_CP1256_CI_AS" in the equal to operation.

    چگونه میشه این مشکل رو حل کرد ؟
    در خود SQL بعد از فیلد اول دستور COLLATE Arabic_CI_AS می آید و این مشکل را حل میکند

    این دستور را در LINQ چگونه میشه پیاده کرد ؟

  2. #2

    نقل قول: برطرف خطای Collation در LINQ

    سلام دوست عزیز .به نظرم تنها راهی که دارین اینه که هر یک از جداول رو تک تک بخونید بعد به صورت linq to object و به صورت زیر join کنید.



    var lst1 = from s in datacontext.Table1 select s;
    var lst2 = from s in datacontext.Table2 select s;

    var joinResult = from m in lst1
    join n in lst2 on m.RefrenceField equals n.ForeignkeyField
    select new { m, n };

    آخرین ویرایش به وسیله hf1988 : سه شنبه 09 اسفند 1390 در 08:53 صبح

  3. #3
    کاربر دائمی آواتار sanay_esh
    تاریخ عضویت
    تیر 1386
    محل زندگی
    برنامه نویس !
    سن
    39
    پست
    449

    نقل قول: برطرف خطای Collation در LINQ

    سلام و تشکر
    دوست عزیز اصل قضیه اینجاست که بنده بین 3 جدول بصورت زیر باید LINQ داشته باشیم

    (from n in Factors_Sub
    from m in Factors
    from a in AID_AUTO
    where m.FactorTypeID == 3 && n.FactorID == m.FactorID && n.AutoCode == ( a.AUTOCODE) group n by new { n.PackageID, n.FactorID , n.AutoCode } into g
    select new { PID = g.Key.PackageID,AutoCode = g.Key.AutoCode , SumTax = g.Sum(x=>x.Tax) , SumToll = g.Sum(x=>x.Toll) , SumDiscount = g.Sum(x=>x.Discount) ,
    SumTotal = g.Sum(x=>x.Total) } )


    خطا هم موقعی رخ میدهد که AUTOCODE == AutoCode را بررسی میکنیم!!!
    آخرین ویرایش به وسیله sanay_esh : سه شنبه 09 اسفند 1390 در 08:38 صبح دلیل: اصلاح کد

  4. #4

    نقل قول: برطرف خطای Collation در LINQ

    الان تو این مثال collatione کدوم جداول با هم فرق داره؟
    اونی که فرق داررو اول select کنید بعد با 2 تای دیگه join کنید .

  5. #5
    کاربر دائمی آواتار sanay_esh
    تاریخ عضویت
    تیر 1386
    محل زندگی
    برنامه نویس !
    سن
    39
    پست
    449

    نقل قول: برطرف خطای Collation در LINQ

    خوب کمی دقت میکردی خودت میتونستی متوجه بشی که جداول کدام ها هستند
    جدول Factors_Sub , AID_AUTO

  6. #6

    نقل قول: برطرف خطای Collation در LINQ

    نقل قول نوشته شده توسط sanay_esh مشاهده تاپیک
    چگونه میشه این مشکل رو حل کرد ؟ در خود SQL بعد از فیلد اول دستور COLLATE Arabic_CI_AS می آید و این مشکل را حل میکند این دستور را در LINQ چگونه میشه پیاده کرد ؟
    سلام.
    شما دو راه حل (صحیح) پیش رو دارید که البته هیچ کدوم به LINQ ارتباطی نداره:

    1. View ای متشکل از کلیه فیلدهای مورد نظر از سه جدول ایجاد کنید و اونجا Collation رو Handle کنید. (روش رو در پاسخ به سوال مشابه در این آدرس ببینید).
    2. یک بار در بانک و با استفاده از ALTER COLUMN، مقدار Collation رو تغییر بدید تا کلیه فیلدها از یک Collation خاص استفاده کنند. (روش انجام اینکار رو اینجا ببینید).

    بعد از انجام یکی از این دو کار، اونوقت می تونید LINQ مورد نظر رو بنویسید.

    موفق باشید.

  7. #7
    کاربر دائمی آواتار sanay_esh
    تاریخ عضویت
    تیر 1386
    محل زندگی
    برنامه نویس !
    سن
    39
    پست
    449

    نقل قول: برطرف خطای Collation در LINQ

    جناب موسوی خیلی ممنون
    بنده این مشکل را با راه حل پیشنهادی شما انجام داده بودم و مرحله را به پایان رساندم
    خواستم بدونم که آیا در LINQ این امکان وجود دارد که دستورات خود SQL را در آن اجرا نمود حتی مانند Convert ها که فکر میکنم لینک خودش پشتیبانی نمیکنه ؟؟؟

  8. #8

    نقل قول: برطرف خطای Collation در LINQ

    نقل قول نوشته شده توسط sanay_esh مشاهده تاپیک
    خواستم بدونم که آیا در LINQ این امکان وجود دارد که دستورات خود SQL را در آن اجرا نمود؟؟؟
    بله، شما می تونید از متود ExecuteQuery برای اجرای مستقیم دستورات SQL استفاده کنید.

    موفق باشید.

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •