我有一个几乎完成的linq查询。 它正在工作,但我需要检索列表中符合要求的项目的原始列表。
现在只返回true或false,如果有count > numberOfResourceToBook
。
但我希望返回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;
答案 0 :(得分: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()
。它与.Count() > 0
完成相同的工作,除了它并不总是需要枚举整个列表:它一旦找到至少一个项就可以返回true。
bool enoughResourceAvailable = result.Any();
最后,要获得与查询匹配的所有时间(如果有的话),您可以对结果使用SelectMany()
,如下所示:
var allMatchingTimes = result.SelectMany(c => c.Times);