繁体   English   中英

Linq查询分组按不同

[英]Linq query group by distinct

我有一个接近完成的linq查询。 它正在工作,但是我需要检索满足要求的列表中项目的原始列表。

现在,仅当count > numberOfResourceToBook它才返回true或false。

但是相反,我想返回availableTimes具有该属性的所有项目(及其所有属性)。

bool enoughResourceAvailable = availableTimes.GroupBy(l => new { l.From, l.To })
  .Select(g => new
  {
      Date = g.Key,
      Count = g.Select(l => l.ResourceId).Distinct().Count()
  }).Where(c => c.Count  >= numberOfResourcesToBook).Count() > 0;

我意识到这是一个老问题,希望您早已弄清楚了。 但是对于其他陷入这个问题的人来说,这是解决问题的方法:

首先,您需要将每个组的可用时间添加到您选择的匿名对象中,以便您有一种在分组后取回它们的方法。 最后消除.Count > 0 ,以便结果是匿名对象的IEnumerable而不是布尔值。

var result = availableTimes
    .GroupBy(l => new { l.From, l.To })
    .Select(g => new
    {
        Date = g.Key,
        Count = g.Select(l => l.ResourceId).Distinct().Count(),
        Times = g.Select(l => l)     // Add this to capture the times for the group
    })
    .Where(c => c.Count >= numberOfResourcesToBook);

接下来,您可以通过在上一个结果上使用enoughResourceAvailable .Any()来设置enoughResourceAvailable的资源。 它执行与.Count() > 0相同的工作,不同之处.Count() > 0它并不总是需要枚举整个列表:找到至少一项就可以返回true。

bool enoughResourceAvailable = result.Any();

最后,要获得与查询匹配的所有时间(如果有的话),可以对结果使用SelectMany() ,如下所示:

var allMatchingTimes = result.SelectMany(c => c.Times);

工作演示: https//dotnetfiddle.net/HCEuMR

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM