如何将这个简单的Entity Framework查询转换为标准SQL查询?

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

我没有使用.NET Entity Framework的经验,并且对此查询的确切用途有疑问:

using (MyCorpo.EarlyWarnings.Model.EarlyWarningsEntities context = new Model.EarlyWarningsEntities()) 
{
    DBContext.SetTimeout(context);    

    model.VulnerabilitySeverityAverage = (from x in context.VulnerabilityAlertDocuments select x.Severity).Average();
}

(模型的类型。VulnerabilitySeverityAverage只是一个字符串)

所以我认为VulnerabilityAlertDocuments映射VulnerabilityAlertDocument数据库表,因为进入EarlyWarningsEntities,我有这行内容:

public DbSet<VulnerabilityAlertDocument> VulnerabilityAlertDocuments { get; set; }

因此,我正在对VulnerabilityAlertDocuments DbSet对象执行查询,该对象代表对数据库上的VulnerabilityAlertDocument表的查询。正确吗?

那么上一个查询到底做了什么?

我认为它选择VulnerabilityAlertDocument表中所有记录的Severity字段值,并根据所有这些值计算平均值。

我的推理正确吗?

如何在传统的SQL查询中转换该实体查询?有人可以帮助我吗?

Tnx

c# .net sql-server entity-framework entity-framework-4
2个回答
1
投票
如何在传统的SQL查询中转换此实体查询?

要查看实际的SQL,您可以仅在查询中调用.ToString()方法;

var sql = (from x in context.VulnerabilityAlertDocuments select x.Severity).Average().ToString();

所以我正在VulnerabilityAlertDocuments DbSet上执行查询代表对VulnerabilityAlertDocument表的查询的对象在我的数据库上。正确吗?

So what exatly do the previous query?

您的查询将是ValnerabilityAlertDocuments表的“严重性”列中的平均值。您的翻译查询看起来与此类似:

SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT AVG([Extent1].[Severity]) AS [A1] FROM [dbo].[ValnerabilityAlertDocuments] AS [Extent1] ) AS [GroupBy1]

也可以尝试使用SQL Server Profiler等工具>

更新:只需将LinqPad添加到工具列表中(感谢Dismissile)


0
投票
Select Average(x.Severity) From VulnerabilityAlertDocuments x
© www.soinside.com 2019 - 2024. All rights reserved.