簡體   English   中英

在C#中需要有關Linq過濾的幫助

[英]Need help with Linq filtering in C#

我所擁有的是一個名為HourList的集合,該集合由Hour對象組成。 Hour的兩個屬性是EmployeeId和Hours。 員工上下班,並創建一個小時記錄。 因此,在一周結束時,我從我們的DAO中交付了多個小時對象的HourList。 要求做出報告,其中僅顯示總工時超過給定閾值的員工。

示例:簡單而扁平的HourList

Id | Hours
----------
1  | 4.5
2  | 6.0
3  | 9.9
1  | 5.5
2  | 2.5

閾值是10。在這種情況下,我只想要ID 1的小時記錄,因為他的總小時數超過10。

我知道我可以通過創建一個新的DAO方法來做到這一點,當我返回初始的HourList時。 我也可以使用foreach語句來非常低效地執行此操作。 我正在努力使Linq變得更好,並希望看到可能的情況。 感謝您的任何幫助。

var filtered = HourList.GroupBy(h => h.id)
                       .Select(g => new { Id = g.Key,
                                          Hours = g.Sum(h => h.Hours)
                                        })
                       .Where(h => h.Hours >= 10);

無法測試,但這應該可以讓您接近。

這是一個簡單的示例,可滿足您的需求:

   class Program
    {
        public class HourEntry
        {
            public int Id { get; set; }
            public int Hours { get; set; }
        }

        static void Main(string[] args)
        {
            List<HourEntry> hours = new List<HourEntry>
            {
                new HourEntry { Id = 1, Hours = 3 },
                new HourEntry { Id = 2, Hours = 4 },
                new HourEntry { Id = 3, Hours = 3 },
                new HourEntry { Id = 1, Hours = 8 },
                new HourEntry { Id = 5, Hours = 2 },
                new HourEntry { Id = 3, Hours = 2 },
                new HourEntry { Id = 3, Hours = 6 },
                new HourEntry { Id = 9, Hours = 2 },
                new HourEntry { Id = 4, Hours = 2 },
            };


            var moreThanTen = from h in hours
                              group h by h.Id into hGroup
                              where hGroup.Sum(hg => hg.Hours) > 10
                              select hGroup.Key;

            foreach (var m in moreThanTen)
            {
                Console.WriteLine(m);
            }
        }
    }
        var hourList = new List<Hour>() 
        { 
            new Hour() { Id = 1, Hours = 4.5M},
            new Hour() { Id = 2, Hours = 6M},
            new Hour() { Id = 3, Hours = 9.9M},
            new Hour() { Id = 1, Hours = 5.5M},
            new Hour() { Id = 2, Hours = 2.5M}
        };

        var over10 = hourList.GroupBy(h => h.Id).Select( h => new { Id = h.Key, Sum = h.Sum( s => s.Hours )}).Where( x => x.Sum >= 10 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM