מיון לפי מיקוד 7 ב- linq
-
כידוע מספרי המיקוד בארץ עברו ל7 ספרות
יש לי טבלה בת אלפי רשומות
אשר לצורך מסוים אני ממיין אותה לפי טווחי מיקוד (מ - עד -)
הבעיה היא שבחלק מהמיקודים הוסיפו שני ספרות בסוף בשביל "מיקוד 7"
בכל אופן אני עובר בלינק על כל הרשומות
וברצוני שכאשר במיקוד של שורה ספציפית מופיע 7 ספרות המיון יתבצע רק ע"פ ה- 5 ספרות הראשונות
וכמובן שגם ה - orderby ימיין בהתאם לכך
יש פתרון יעיל לא קוד ארוך?תודה!
פורסם במקור בפורום CODE613 ב09/10/2013 17:24 (+03:00)
-
בשאילתה אתה מוסיף עמודת ביטוי, ולפיה אתה ממיין.
הביטוי צריך להיראות ככה:Mid([ColumnName], 1, 5)
כאשר ColumnName זה שם העמודה, ואתה ממיין לפי עמודת הביטוי ולא העמודה המקורית.
שים לב שזה מיון טקסטואלי, כלומר האות 9 גדולה מהאות 8 אפי' שאחרי ה9 יש נגיד רק ספרה אחת ואחרי ה8 יש 4.
בדרך כלל זה לא משנה כי כל המיקודים באותו אורך (לא פחות ולא יותר מחמש).אם אתה רוצה שהמיון יהיה מספרי,
אתה צריך עטוף את הפונקצייה דלעיל בביטוי Val שממירה למספר.אם העמודה המקורית היא כבר מספר, יותר קצר לכתוב ביטוי שבודק אם זה גדול מ99999 ואם כן מחלק במאה.
ככה:iif([ColumnName]>99999, [ColumnName]/100, [ColumnName])
ולמיין לפי הביטוי כמובן.
הצלחה,
[size=85:fsxvlofl]ותמיד, תמיד, לשאול בפורום...[/size:fsxvlofl][u:fsxvlofl][size=150:fsxvlofl]עריכה:[/size:fsxvlofl][/u:fsxvlofl]
רק כעת שמתי לב לכותרת בה כתוב LINQ.
אני חשבתי שהמדובר על אקסס.
אז בלינק זה יותר פשוט אפי'...order by Mikud.SubString(0,5)
או אם זה מספרי:
order by (Mikud > 99999 ?? Mikud / 100 : Mikud) (0,5)
השורה הזאת משתמשת עם ביטוי-תנאי, ביטוי שהרבה מתכנתים שוכחים מקיומו.
בלי הביטוי אז צריך לעשות פונקציה (מלאה או למבדה), ולתת את הערך החוזר לorder by.פורסם במקור בפורום CODE613 ב09/10/2013 17:43 (+03:00)