Cod*_*shi 2 c# linq sql-server
我有一个查询,其中我需要从两个不同的表中获取计数。这是一个非常简单的查询形式(我的查询有更多的联接和条件,但这是我所坚持的部分):
select (select count(1) from Table1) as One, (select count(1) from Table2) as Two
Run Code Online (Sandbox Code Playgroud)
以下 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() };
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个,这也发送了 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()};
Run Code Online (Sandbox Code Playgroud)
您需要将其设为可翻译的单个 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();
Run Code Online (Sandbox Code Playgroud)
请注意,将子查询放入IQueryable变量中将导致发送三个单独的查询。
或者,由于Count()没有等效的查询语法,因此 lambda 语法更加紧凑:
var final = this.Table1.DefaultIfEmpty().Select(t => new {
One = this.Table1.Count(),
Two = this.Table2.Count()
}).First();
Run Code Online (Sandbox Code Playgroud)