PDA

View Full Version : مشکل سورت فارسی با linq



saeidgab
سه شنبه 19 بهمن 1389, 17:45 عصر
با سلام،
من با linq یه query به دیتابیس زدم و اطلاعات دریافتی رو با متد OrderBy بر اساس فیلدی که مقادیرش فارسی و نوع داده ایش در دیتابیس NVarchar سورت میکنم، ولی نمیدونم چرا حرف "ک" رو درست سورت نمیکنه و در آخر می آره یعنی اون رو آخرین حرف الفبا حساب میکنه در مورد "پ" و "ژ" مشکلی نداره.
و Solution دوستان برای این مشکل؟

AmirHarirbafan
چهارشنبه 20 بهمن 1389, 01:12 صبح
مشکل نه از شما هست نه از LINQ . مشکل اینجاست که دو نوع حرف ک وجود دارد. در مورد حرف ی نیز این امر صادقه. این حروف به صورت عربی و فارسی وجود داره : "ی" یا "ي" و "ک" یا "ك"
کد هرکدوم از این کاراکتر ها با اون یکی فرق داره، برا همینه که حرف "ك" که یک حرف عربی است در آخر نشون داده میشه. راه حلی که به ذهن من میرسه اینه که یه کوئری برا بانکتون بنویسید و تمام حروف "ك" رو به "ک" تبدیل کنید. این کار رو میتوید برای حرف "ي" نیز انجام بدید تا مطمئن تر بشید.
البته در آخر اضافه کنم که شاید بیشتر از این حروف وجود داشته باشه، اما من فقط از این دو مورد اطلاع دارم.

saeidgab
چهارشنبه 20 بهمن 1389, 13:04 عصر
با تشکر از پاسخ AmirHarirbafan (http://barnamenevis.org/member.php?114253-AmirHarirbafan)،
مشکل از همون "ک" فارسی یا عربی، ولی در این مورد من اطلاعاتم رو با کیبورد فارسی وارد میکنم و جالب اینکه وقتی "ك" عربی رو با کاراکتر "ک" توی دیتابیس عوض میکنم مشکل سورت حل میشه و همه چی سر جاش قرار میگیره، مثل اینکه عمل سورت بر اساس حروف عربی انجام میشه. حالا چطور میشه سورت فارسی انجام داد؟

AmirHarirbafan
چهارشنبه 20 بهمن 1389, 13:11 عصر
مثل اینکه عمل سورت بر اساس حروف عربی انجام میشه. حالا چطور میشه سورت فارسی انجام داد؟
منظورتونو متوجه نشدم
اگه داده هاتون سورت شد کار تمومه دیگه. سورت فارسی و عربی نداریم

saeidgab
چهارشنبه 20 بهمن 1389, 14:33 عصر
آره وقتی تو دیتابیس"ك" عربی رو جایگزین "ک" فارسی کردم مشکل حل شد، ولی حالا میخوام بدونم چرا "ک" فارسی سورت نمیشه؟

AmirHarirbafan
پنج شنبه 21 بهمن 1389, 01:34 صبح
هنگامی که سی شارپ میخواهد رشته ها را مرتب سازی کند آنها را با استفاده از کد کارکتر (اسکی یا یونی کد) آنها را مقایسه مینماید مثل اینکه درحال مقایسه دو مقدار int است.
کد "ك" عربی 1603 میباشد و کد "ک" فارسی 1705 ، به همین خاطر در مرتب سازی آنها مشکل ایجاد میشود

hosseinreza
شنبه 20 اسفند 1390, 00:57 صبح
سلام چرا موقه ای که با گرید ویو عمل مرتب سازی را انجام می دهیم به این مشکل بر نمی خوریم ؟