הפעלת Linq Queries על פקדים המכילים Collections ללא חשיפה של IEnumerable מתאים

יום שישי, נובמבר 25, 2011

  אחד מהיכולות החזקות של השפה שאנחנו משתמשים בהם רבות זהו היכולת להפעיל Linq to Objects על כל מי שמממש את:IEnumerable<T>     ב - windows forms ישנם הרבה פקדים המכילים collections - כמו TabControl, TreeView ועוד.   הבעייה עם כל הפקדים הללו שהם חושפים את IEnumerable הרגיל, (ללא T) מה שגורם לכך שאי אפשר להפעיל עליהם שאילתות לינק.     כדי לתקן זאת ניתן להוסיף Extension Method מתאים לכל פקד ולהמיר את ה - IEnumerable  לאחד שתומך ב - Generic, לדוגמא:   internal static class Extension {     internal static IEnumerable<TabPage> AsEnumerator(this TabControl.TabPageCollection collection)     {         foreach (TabPage item in collection)         {             yield return item;         }     }      ...
2 תגובות

Including Empty Directory While Deploying a Web Application

יום ראשון, מאי 29, 2011

  גיל התלונן ובצדק שכשעושים Deploy ל - WebApplication זה לא מכיל את התיקיות הריקות, והוא הציע להוסיף קובץ טקסט ריק, אני מניח שכל מי שעבד בעולם ה - web נתקל בבעייה המעצבנת הזו, ולכן החלטתי אחת ולתמיד לפתור את זה.     פוסט זה מכיל הוראות כיצד לשנות את ההגדרות של ה- publish המוגדר בסביבת העבודה, הקוד לא עבר QA מקיף ולכן השינויים הם באחריות המשתמש.     ראשית הורידו את ה - dll הזה, הוא מכיל מחלקה אחת הנראית כך:   public class CopyEmptyFolder : Task {     public string ProjectFile { get; set; }     public string OutputFolder { get; set; }       public override bool Execute()     {         XDocument...
תגיות: , ,
אין תגובות

Aggregate

יום שישי, מרץ 18, 2011

  שימוש נחמד ב - Aggregate של LINQ זה היכולת לחבר מערך כלשהו למחרוזת אחת המופרדת עם פסיקים (עבור שאילתת in).   לדוגמא:   int arr = { 1, 2, 3, 4, 5, 6 };   string s = arr.Select(x => x.ToString()).Aggregate<string>((x, y) => x + "," + y);   יחזיר: "1,2,3,4,5,6"   המשתנה x יכיל בכל סיבוב של הלולאה את הערכים הקודמים ואילו המשתנה y יכיל כל פעם את המשתנה הנוכחי.   אפשר להריץ את הקוד הבא כדי להווכח בכך:   string s = arr.Select(x => x.ToString()).Aggregate<string>((x, y) =>             {                 Console.WriteLine("x:{0}\r\ny:{1}", x, y);                 Console.WriteLine();                 return x + "," + y;            ...
תגיות: , ,
3 תגובות

CS1525: Invalid expression term '>'

יום שלישי, ינואר 4, 2011

  באחד הפרוייקטים שאני נמצא בהם, עובדים (לצערי) עם Web Site, הסביבה היא Visual Studio 2008 SP1 וכמובן זה מקונפג ל - Net Framework 3.5.   כל ניסיון להשתמש ב - LINQ הביא לשגיאת קומפילציה שהתחביר אינו מוכר.   לאחר שיטוט בגוגל הגעתי לכאן והרעיון שהוצע שם אכן עבד. להעביר את הפרוייקט ל - Framework 3.0. לקמפל. להעביר את הפרוייקט ל - Framework 3.5. לקמפל. להתחיל להשתמש ב - LINQ   ואכן זה עבד.  
תגיות: , ,
2 תגובות

Quick guide to LINQ (Language Integrated Query)

יום שלישי, אוקטובר 5, 2010

המדריך המהיר ל - LINQ. מטרת הפוסט: בסיומו של פוסט זה אתם תדעו לכתוב קוד LINQ בשני התחבירים שלו ותבינו למה כדאי לעבוד עם LINQ ומה זה נותן לנו בתור מפתחים.     תוכן עניניים מה זה לינק ומה נותן לנו השימוש בו. לפני LINQ. var keyword Anonymous Types Extension Methods Lambda Expressions כתיבת קוד שמדמה LINQ תחביר LINQ Extension Methods Syntactic sugar PLINQ   מה זה LINQ ומה נותן לנו השימוש בו. הרעיון המרכזי מאחורי השימוש ב – LINQ הוא להפסיק לכתוב "איך" ולהתחיל לכתוב "מה", כלומר כשאנחנו כותבים קוד אנחנו רגילים לכתוב קוד שהמשמעות שלו הם הוראות למחשב איך לבצע את מה שאנחנו רוצים לעשות, למשל אם אנחנו רוצים לכתוב קוד שמוצא את כל המספרים הזוגיים...
8 תגובות

Using ToOrder and ToDictionary

יום שלישי, יולי 6, 2010

  דוגמת שימוש למיון Dictionary.   נניח שיש לכם פונקציה שמחזירה Dictinoary   private static Dictionary<string, int> GetLeftTabsDefinition() {     Dictionary<string, int> tabs = new Dictionary<string, int>()     {        {"ShowInfo", 2},        {"ShowResources", 1 },        {"ShowTOC", 3  },     };       return tabs; }   כעת קבלתם את האובייקט   var tabs = GetLeftTabsDefinition();   ואתם רוצים למיין אותו - הקוד צריך להיראות כך.   tabs = tabs.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value);
תגיות: , ,
2 תגובות

LinqToSql – Save just the last change – Part 2

יום חמישי, ינואר 15, 2009

  בהמשך לפוסט הקודם שבו כתבתי איך לעשות עידכון רק לשינוי האחרון, דברתי עם אדר לגבי המוטיבציה לעשות את זה, מדוע שנרצה לעדכן רק את האחרון, והגענו להסכמה שיש כאן משהו מוזר,   כי ב Ado הישן והטוב כשרצינו לעשות upadte היינו יכולים לשלוח מערך של DataRow, ולעדכן רק חלק מהנתונים, אז מדוע כשאנחנו מתקדמים ל LinkToSql אנחנו הולכים אחורה מבחינה פונקציונליות ?   בכל מקרה במדה ואנחנו מוכנים לעשות undo לכל השינוים האחרים מלבד האחרון, נוכל להשתמש בפתרון, מהפוסט הקודם,    אבל במדה ולא נרצה לעשות undo, יניב חדד הציע לי, לייצר DataContex חדש, להעביר אליו את השינוי האחרון, ולעשות עליו SubmitChanges,   אז ניסיתי לממש אותו, ומסתבר...
תגיות: , ,
אין תגובות

LinqToSql – Save just the last change

יום שלישי, ינואר 13, 2009

  מישהו חביב בשם נריה שאל אותי את השאלה הבאה:   "יש לי אפליקציה חלונאית, ובה dataGridView המקבל את הנתונים ע"י Binding  מ DataContext. ואני רוצה כפתור שישמור רק את השינוי האחרון שבוצע."   באופן אישי לא יצא לי כל כך להשתמש עדיין ב LinqToSql, אבל כמובן שזאת הייתה הזדמנות נהדרת לבדוק את זה, וידוע שאני אוהב ללמוד דברים חדשים, אז התחלתי להסתכל..   בסוף עשיתי את הדבר הבא, עשיתי undo לכל השינויים האחרונים, חוץ מלאחרון, ואז שמרתי את השינוי האחרון. הנה הקוד:     1 public static void UpdateLastChanges()     2 {     3     ChangeSet cs = ndc.GetChangeSet();     4     var listOfUpdates = cs.Updates.ToList();     5     listOfUpdates.RemoveAt(listOfUpdates.Count - 1);     6      7     ndc.Refresh(RefreshMode.OverwriteCurrentValues, listOfUpdates);     8      9     ndc.SubmitChanges();    10 }   זה עובד, אבל אני לא מרוצה מזה, דבר ראשון,...
תגיות: , ,
תגובה אחת