具有多个聚合的LINQ查询

Dar*_*ler 6 linq linq-to-objects .net-3.5

如何创建等效的Linq To Objects查询?

SELECT MIN(CASE WHEN p.type = "In" THEN p.PunchTime ELSE NULL END ) AS EarliestIn,
       MAX(CASE WHEN p.type = "Out" THEN p.PunchTime ELSE NULL END ) AS LatestOUt
FROM Punches p
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 2

您无法在普通 LINQ to Objects 中有效地选择多个聚合。当然,您可以执行多个查询,但这可能效率很低,具体取决于您的数据源。

我有一个解决这个问题的框架,我称之为“Push LINQ”——这只是一个爱好(对我和 Marc Gravell 来说),但我们相信它工作得很好。它作为MiscUtil的一部分提供,您可以在我的博客文章中了解它。

它看起来有点奇怪 - 因为你将结果定义为“futures”,然后将数据推送到查询中,然后检索结果 - 但一旦你明白了它,那就没问题了。我很想听听您如何使用它 - 如果您使用它,请给我发邮件 skeet@pobox.com。