2017-05-30 52 views
-1

我想获得使用LINQ GroupBy的列中每个项目的计数,但是我没有得到预期的输出。 实施例:使用GROUP BY获取每列的具体数量LINQ

NAME  | Items | Items2 
    1.ken | asd | zxc 
    2.kent | null | zwe 
    3.ken | qwe | null 

预期输出:

NAME | Items | Items2 
ken | 2 | 1 
kent | 0 | 1 

代码:

var Data=Items.GroupBy(z=>z.Name).Select(s=>new { Name=s.Key, Items=s.Count(q=>q.Items),Items2=s.Count(x=>x.Items2) }).ToList(); 

上面的代码不工作。

+1

你得到什么输出?或任何错误 –

+0

你总是会有两列项目和项目2,或你会有更多? – jdweng

+0

我对s.Count(q => q.Items)和s.Count(x => x.Items2)有错误 –

回答

1

我觉得null在预期输出count()产生问题,所以我建议你在Count()添加条件,排除具有null值的那些项目。所以你的查询将如下所示:

var Data=Items.GroupBy(z=>z.Name) 
       .Select(s=>new { 
           Name=s.Key, 
           Items=s.Count(q=>q.Items!=null), 
           Items2=s.Count(x=>x.Items2!=null) }) 
       .ToList(); 
+0

q.Items和x.Items2中的红线,与发布的代码相同的错误。 @非幸运 –

+0

@KennethMontealto:错误说什么? 'Items'的类型是什么?它有像'Items'和'Items2'这样的属性吗? –

+0

不能将类型'字符串'转换为'bool' –