LINQ – Best practice for: Sum, Count, Min, Max and Average

Language Integrated Query – LINQ, הוא כלי נהדר עבור מתכנתי #C ו VB.Net, הוא מאפשר שימוש בתחביר פשוט ומובן לצורך שליפת תוצאות.

Bad LINQ

var high = students.Count(i => i.MathGrade >= 60);
var low = students.Where(i => i.MathGrade < 60).Count();
var sum = students.Sum(i => i.MathGrade);

הקוד שלעיל יבצע של בקשות נפרדות על ה Query – ברור שנוכל לבצע ולייעל את הקוד זה.

Good LINQ

נרצה להכניס את כל LINQ למשתנה בודד. הבעיה שלנו שלא ניתן לבצע את שלנו לא על Select ולא על Where.

הטריק הוא להשתמש ב GroupBy ללא שימוש ב GroupBy באמת. כלומר אנחנו לא רוצים שהתבצע כיווץ על פי property מסויים. הטריק נעשה באופן הבא:

var a = students.GroupBy(g => 1)
            .Select(g => new
            {
                High = g.Count(i => i.MathGrade >= 60),
                Low = g.Count(i => i.MathGrade < 60),
                Sum = g.Sum(i => i.MathGrade)
            });

לאחר מכן, ניתן לשלוף את המידע בקלילות:

var highCount  = a.GetEnumerator().Current.High;
var lowCount = a.GetEnumerator().Current.Low;
var sum = a.GetEnumerator().Current.Sum;
עם התגית: , , , , , , ,
פורסם ב-Average, Best Practice, C#, Count, LINQ, Max, Min, Sum

כתיבת תגובה