【问题标题】:Linq group by query with count and other fields in mvc4Linq按mvc4中的count和其他字段查询分组
【发布时间】:2016-08-12 03:36:11
【问题描述】:

我正在编写 linq 查询以从表中获取一些详细信息。我想为每个clientID 计算docStatus"notVerified"

我的表结构如下

ID     clientId  clientName     empID       docStatus
1       IN1001    Infy           100        Verified
2       IN1001    Infy           101        notVerified
3       IN1001    Infy           102        notVerified

查询后我想要下面表格中的数据

clientID    clientName    Count
IN1001      Infy          2   

这是我在下面尝试的。我能够得到计数,但我应该在下面的查询中放置 where 条件。

var noofRecords = (from c in db.ts_upld_doc
                   group c by c.upld_docid into grouping
                   select new
                   {
                       key = grouping.Key,
                       Count = grouping.Count()
                   });
return noofRecords.Count();

提前谢谢你。

【问题讨论】:

  • upld_docid 是什么?您的查询与提供的表不匹配,这使得它令人困惑..
  • 上表ID为upld_docid。很抱歉给您带来不便。

标签: c# linq asp.net-mvc-4


【解决方案1】:

您可能会在分组之前放置where 子句(为什么要对您要过滤掉的这些项目进行分组)。然后,如果您想要指定的输出,最简单的方法是按clientIDclientName 进行分组。

此外,在您的上述查询中,您按 upld_docid (ID) 字段进行分组 - 这是您数据中的一个唯一字段 - 这意味着您的所有组的大小均为 1 - 就好像您没有分组一样。

看下面的查询,应该做你想做的:

var noofRecords = (from c in db.ts_upld_doc
                   where c.docStatus == "notVerified"
                   group c by new { c.clientID, c.clientName }  into grouping
                   select new
                   {
                        ClientId = grouping.Key.clientID,
                        ClientName = grouping.Key.clientName,
                        Count = grouping.Count()
                   }).ToList();

【讨论】:

  • 是的,它对我来说很好用。如果我没有错,我应该将 noofRecords 从数据层发送到控制器,如下右 public list getdetails { 上面的查询并返回 noofRecords}?
  • 我不会在吸气剂中这样做,但这是一个品味问题 :)
【解决方案2】:

您可以将 where 放置在多个位置,一个选项:

var noofRecords = (from c in db.ts_upld_doc
                   where c.docStatus == "notVerified"
                   group c by c.upld_docid into grouping
                   select new
                   {
                        key = grouping.Key,
                        Count = grouping.Count()
                   });

return noofRecords.Count();

注意!!您返回的是记录数,而不是您设置为 grouping.Count() 的属性计数

要获得预期的结果,您应该执行以下操作:

var noofRecords = (from c in db.ts_upld_doc
                   where c.docStatus == "notVerified"
                   group c by new { c.clientId , c.clientName } into grouping
                   select new
                   {
                      ClientId  = grouping.Key.clientId,
                      ClientName = grouping.Key.clientName,
                      Count = grouping.Count()
                   });

return noofRecords.ToList();

【讨论】:

  • 查询工作正常,但方法 noofRecords.Count();是不正确的。我向 db 添加了一行,结果如下 [0] {key=IN1001,count=2}。 [1] {key=IN1001,count=1}
  • 现在我想将结果作为每个 clientid 的 clientID clientName Count
  • @NIRANJANG 这正是我在“注意”部分所说的。我刚刚回答了我应该将where 子句放在哪里的问题。检查编辑后的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 2012-12-31
相关资源
最近更新 更多