代码之家  ›  专栏  ›  技术社区  ›  CodingYoshi

从多个表获取计数的Linq查询

  •  1
  • CodingYoshi  · 技术社区  · 6 年前

    我有一个查询,需要从两个不同的表中获取计数。这是一个非常简单的查询形式(我的查询有更多的联接和条件,但这是我一直坚持的部分):

    select (select count(1) from Table1) as One, (select count(1) from Table2) as Two
    

    下面的LINQ查询可以工作,但我希望使用 发送到SQL Server的单个Linq查询 . 此查询和我尝试的许多其他版本将导致2个查询发送到服务器:

    var query1 = from m in this.Table1 select m;
    var query2 = from sr in this.Table2 select sr;
    var final = new { One = query1.Count(), Two = query2.Count() };
    

    我也尝试过这个,这也发送了2个查询:

    var final = from dummy in new List<int> { 1 }
        join one in query1 on 1 equals 1 into ones
        join two in query2 on 1 equals 1 into twos
        select new { One = ones.Count(), Two = twos.Count()};
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   NetMage    6 年前

    您需要使其成为一个可以翻译的单个LINQ查询:

    var final = (from m in this.Table1.DefaultIfEmpty()
                 select new {
                     One = (from m in this.Table1 select m).Count(),
                     Two = (from sr in this.Table2 select sr).Count()
                 }).First();
    

    注意,将子查询放入 IQueryable 变量将导致发送三个独立的查询。

    或者,因为 Count() 没有等价的查询语法,这在lambda语法中有点紧凑:

    var final = this.Table1.DefaultIfEmpty().Select(t => new {
                     One = this.Table1.Count(),
                     Two = this.Table2.Count()
                }).First();