如何将这个简单的Entity Framework查询转换为标准SQL查询?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将这个简单的Entity Framework查询转换为标准SQL查询?相关的知识,希望对你有一定的参考价值。
我没有使用.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
如何在传统的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)
Select Average(x.Severity)
From VulnerabilityAlertDocuments x
以上是关于如何将这个简单的Entity Framework查询转换为标准SQL查询?的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework Core:如何将 2 个 COUNT 查询合并为一个