2017-05-24 54 views
0

什么是SQL相当于:LINQ的COUNT()在选定字段

SELECT Id, Name, Count(PolicyNumber) ... 
Linq中

。我想这样做:

var distinctClients = clientPolicies 
       .Select(i => new { i.ClientId, i.Name, i.PolicyNumber.Count() }) 
       .Distinct() 
       .OrderBy(i => i.Name).ToList(); 

有没有办法在Linq做到这一点?提前致谢。

+2

假设PolicyNumber是一家集;我不明白你的代码为什么不起作用。你能解释你有什么问题吗? – BradleyDotNET

+0

尝试将'i.PolicyNumber.Count()'的结果赋给一个已命名的属性。你看到语法错误还是异常? – jorgonor

+0

我收到错误:'Invalid anonymous type member declarator ...'this in i.PolicyNumber.Count()。我想我需要通过ClientId和Name来完成一个组。任何想法如何实现这一目标? –

回答

3
var distinctClients = clientPolicies 
      .GroupBy(i => new { i.ClientId, i.Name}) 
      .Select(g => new { ClientId= g.Key.ClientId, Name=g.Key.Name,Count=g.Count()}) 
      .OrderBy(i => i.Name).ToList(); 

我没有测试,但它应该是关闭...

+0

OP - 这是正确的答案。请注意,在SQL中,如果在查询中没有GROUP BY,则无法执行COUNT操作。然后请注意,此答案使用LINQ GroupBy,从下一步中生成的聚合中获取计数。 –

+0

感谢您的回复。我得到错误:无效的匿名类型成员声明...在'g.Count()'。有任何想法吗? –

+0

查看更新的答案。 –