[英]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.