Linq从多个表中选择

时间:2013-04-02 23:16:21

标签: linq entity-framework

我有以下型号

public class SummaryModel
{
    public int CompanyCount { get; set; }
    public int GroupCount { get; set; }
    public int ProjectCount { get; set; }
    public int ResourcesCount { get; set; }
    public int PeopleCount { get; set; }
}

我想使用linq查询我的数据库并从多个表返回记录计数并填充此模型对象。

我就是这样做的:

        using (var ctx = new WeWorkModel.weWorkEntities())
        {
            var summary = new SummaryModel()
                {
                    CompanyCount = ctx.Companies.Count(),
                    PeopleCount = ctx.People.Count(),
                    GroupCount = ctx.Groups.Count(),
                    ProjectCount = ctx.Projects.Count(),
                    ResourcesCount = ctx.Resources.Count()
                };

        }

这是最有效的方法吗?

2 个答案:

答案 0 :(得分:1)

是的,这是最有效的方式 - 相当于编写sql查询,因为这不会获取对象,只会对服务器进行计数。所以像这样(使用探查器我跟踪查询)

SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[Company] AS [Extent1]
)  AS [GroupBy1]

答案 1 :(得分:0)

您是否需要将此模型存储在数据库中或在实例化后更改其值?如果不是,为什么不将此代码块放在无参数构造函数中并将字段标记为只读,以避免使用此模型与预期不同。如果您稍后发现需要更好地控制字段的初始化,只需添加另一个构造函数来处理该特定情况。对于主要问题,我认为处理它的方式没有什么特别低效的。尽管如此,使用代码几乎总是采用更简单的方式或更有效的方式来处理任何场景。