如何计算linq中的多列数据

时间:2018-06-12 09:44:37

标签: sql entity-framework linq

toIndex

我在Linq中写这个查询

SELECT country, city, COUNT(school), COUNT(collage) 
FROM T1
GROUP BY country, city

但他们会计入var count_captainRegisterd1 = (from a in dt1.AsEnumerable() group a by new { oc_name = a.Field<string>("county"), oc_city = a.Field<string>("city") } into g select new { g.Key.oc_name, g.Key.oc_city, country = g.Count() } ).ToList(); 列。我希望countrycountry都计算

2 个答案:

答案 0 :(得分:0)

这是您查询的linq:

var count_captainRegisterd1 = 
    (from a in dt1.AsEnumerable()
     group a by new
     {
         oc_name = a.Field<string>("county"),
         oc_city = a.Field<string>("city")
     } into g
     select new
     {
          Country = g.Key.oc_name,
          City = g.Key.oc_city,
          SchoolCount = g.Count(r => !string.IsNullOrWhiteSpace(r.Field<string>("school"))),
          CollageCount = g.Count(r => !string.IsNullOrWhiteSpace(r.Field<string>("collage")))
      }).ToList();

答案 1 :(得分:0)

唉,你忘了写T1课。在我看来,除了ID之外,它还有一个Country一个City以及一个与SchoolCollage的一对多关系(你的意思是{{1} }}?)。像这样:

College

这足以让实体框架了解您想要设计的关系。

您的查询将是:

class T1
{
    public int Id {get; set;}
    public string Country {get; set;}
    public string City {get; set;}

    // relations: every T1 has zero or more Schools and Colleges:
    public virtual ICollection<School> Schools {get; set;}
    public virtual ICollection<College> Colleges {get; set;}
}
public class School
{
     public int Id {get; set;}
     // every School belongs to exactly one T1 using virtual key
     public int T1Id {get; set;}
     public virtual T1 T1 {get; set;}
     ...
}
 public class College
{
     public int Id {get; set;}
     // every College belongs to exactly one T1 using virtual key
     public int T1Id {get; set;}
     public virtual T1 T1 {get; set;}
     ...
}
class MyDbContext : DbContext
{
    public DbSet<T1> T1s {get; set;}
    public DbSet<School> Schools {get; set;}
    public DbSet<College> Colleges {get; set;}
}

在单词中:从T1序列中的每个元素,使用相同的城市/国家组合制作元素组。可能有几个相同的城市/国家组合(在美国有许多名为约克的地方)。所以一个小组可能有几个要素。从组中的每个元素中,取出存储在组密钥中的公共城市/国家/地区。从小组的所有元素中取出学校并统计所有学校。与大学一样。

介意:你从亚利桑那州的约克和南达科他州的约克一起学校。不确定这是否是你想要的,但这就是你的SQL所做的。

最后的评论

每个城市都在一个国家。每个国家都有零个或多个城市。把城市和国家放在他们自己的桌子里,并且有一对多的关系,这不是更好吗?例如,如果您将“Leningrad”重命名为“Sint Petersburg”,您是否要更新所有“人物”的表格?如果“塞巴斯托波尔”将国家从“乌克兰”改为“俄罗斯联邦”,你还想再次更新所有公民吗?选择你的表格和标识符,这样一旦你有了东西,如果它改变名称或位置,它就不会变得不同。