【问题标题】:LINQ Query: new query object with a Count element of another tableLINQ 查询:具有另一个表的 Count 元素的新查询对象
【发布时间】:2019-12-22 22:55:48
【问题描述】:

下面是我正在尝试操作的 LINQ 查询

var custSelect = from m in _context.Entities
                         where m.Active == true && m.EntityTypeId == 1
                         orderby m.Name
                         select new { m.EntityId, m.Name, JobCount = _context.Jobs.Where(o => o.CustomerId == m.EntityId).Distinct().ToList().Count };

我希望能够选择一个新的选择变量作为 JobCount,它是一个整数,用于计算有多少工作附加到所述客户。 稍后,在模型创建过程中,我希望能够通过 Count 变量进行排序。

有什么办法吗?

【问题讨论】:

  • 您在此处对表进行了联接,但您的查询中没有联接。你应该明确地这样做。要计算一些东西,你需要一个分组。如果没有 Jobs 存在,你想做什么?这决定了您是需要内连接还是左连接。
  • 哦,好的,这对我有用。我的代码只是缺少一个连接和更多。谢谢

标签: c# asp.net-mvc linq


【解决方案1】:

你可以试试这种方式,Here 是现场演示

var result = (from e in entities
                  join j in jobs on e.EntityId equals j.CustomerId
                  where e.Active && e.EntityTypeId == 1
                  select new 
                  {
                      e.EntityId, 
                      e.Name,
                      j.JobId
                  }).GroupBy( p => new { p.EntityId, p.Name })
                    .Select(g => new 
                                {
                                    EntityId = g.First().EntityId, 
                                    Name = g.First().Name,
                                    JobCount = g.Count()  
                                })
                    .OrderBy(p => p.Name);

【讨论】:

  • 这能回答你的问题吗?如果您需要任何帮助,请告诉我。 @Aquaphor
  • 是的,这实际上效果非常好。它比我想象的要大得多,但效果很好。将此标记为答案。圣诞节假期很忙,抱歉:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多