2013-12-12 79 views
3

任何人都可以请建议如何通过使用linq从所有Event对象中获得点的总和。如何通过linq获取嵌套对象的值计数

new Category 
{ 
    CategoryId = "NUTR", 
    CategoryName = "NUTR", 
    CategoryDescription = "NUTR Desc", 
    TotalPoints = "100", 
    Events = new List<Event> 
      { 
      new Event{Firstname = "HELEN",Surname = "BECKETT", 
       Points = "10", Description = "NUTR Desc",Eventdate = "2013/04/19",EntityNumber = "1203206956"}, 
      new Event{Firstname = "PAUL",Surname = "BECKETT", 
       Points = "90", Description = "NUTR Desc",Eventdate = "2013/06/19",EntityNumber = "1203206957"} 
      } 
} 
+1

询问代码的问题必须**证明对问题正在解决**。包括尝试解决方案,为什么他们没有工作,以及*期望*结果。另请参阅:[堆栈溢出问题清单](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) –

回答

-1

如果我correclty明白这一点可以通过Linq 要实现的问题,我建议你改变从串点的类型,如果可能的话

Category cat = .... 

var countEvents = cat.Sum(i=>i.Events.Sum(ii=>ii.Points)); 
+0

您返回一些事件,而不是所有事件的点数之和。此外,为什么在实现“ICollection ”时调用'Count()',因此具有'Count'属性。 –

+0

正确,我已将查询更改为'Sum()' –

+1

仍然不正确。 'Points'是'string',而不是'int'。 –

5

您需要使用SelectMany拼合为int events的列表,然后执行以下操作:

var totalPoints = categories 
    .SelectMany(c => c.Events) 
    .Sum(e => Convert.ToInt32(e.Points));