繁体   English   中英

Linq查询以从多个表中获取计数

[英]Linq query to get get count from multiple tables

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

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

以下linq查询有效,但我想通过将单个linq查询发送到SQL Server来完成上述操作。 该查询和我尝试过的许多其他版本导致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()};

您需要使其成为可以翻译的单个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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM