Linq等价于一个数据库行程中的多个表的聚合函数

问题描述 投票:1回答:2

我有一个表函数,该函数返回表名和该表中的条目数:

CREATE FUNCTION [dbo].[ufnGetLookups] ()
RETURNS
@lookupsWithItemCounts TABLE 
(
    [Name] VARCHAR(100),
    [EntryCount] INT
)

AS 
BEGIN
    INSERT INTO @lookupsWithItemCounts([Name],[EntryCount])
     VALUES
               ('Table1', (SELECT COUNT(*) FROM Table1)),
               ('Table2', (SELECT COUNT(*) FROM Table2)),
               ('Table3', (SELECT COUNT(*) FROM Table))

    RETURN;
END

上述简单函数的Linq等效于什么?请注意,我想一次获得结果,而操作的速度对我来说非常重要。如果我意识到将linq转换为sql会导致庞大的sql带来性能下降,那么我宁愿坚持使用现有的用户定义函数,而无需使用linq等价物。

c# entity-framework linq tsql
2个回答
1
投票

您可以使用UNION查询来实现。 EG

var q = db.Books.GroupBy(g => "Books").Select(g => new { Name = g.Key, EntryCount = g.Count() })
          .Union(db.Authors.GroupBy(g => "Authors").Select(g => new { Name = g.Key, EntryCount = g.Count() }));

var r = q.ToList();

0
投票

不是EF专家,不确定是否会更出色。

Select TableName = o.name
      ,RowCnt    = sum(p.Rows)
  From sys.objects    as o
  Join sys.partitions as p on o.object_id = p.object_id
 Where o.type = 'U'
   and o.is_ms_shipped = 0x0
   and index_id < 2  -- 0:Heap, 1:Clustered
   --and o.name in ('Table1','Table2','Table3' )   -- Include (or not) your own filter
Group By o.schema_id,o.name

注:希望我能记得它的来源,但是我在发现过程中使用了它。

© www.soinside.com 2019 - 2024. All rights reserved.