我没有使用.NET 实体框架的经验,我对这个查询到底做了什么有疑问:
using (MyCorpo.EarlyWarnings.Model.EarlyWarningsEntities context = new Model.EarlyWarningsEntities())
{
DBContext.SetTimeout(context);
model.VulnerabilitySeverityAverage = (from x in context.VulnerabilityAlertDocuments select x.Severity).Average();
}
(model.VulnerabilitySeverityAverage的类型只是一个字符串)
所以我认为 VulnerabilityAlertDocuments 会映射 VulnerabilityAlertDocument数据库表,因为在 EarlyWarningsEntities 中我有这样的内容:
public DbSet<VulnerabilityAlertDocument> VulnerabilityAlertDocuments { get; set; }
所以我正在对 VulnerabilityAlertDocuments DbSet对象执行查询,该对象代表我数据库上 VulnerabilityAlertDocument 表的查询。这是对的吗?
那么以前的查询是什么?
我认为它会选择 VulnerabilityAlertDocument 表中所有记录的严重性字段值,并根据所有这些值计算avarage值。
我的推理是否正确?
如何在经典SQL查询中转换此实体查询?有人可以帮帮我吗?
TNX
答案 0 :(得分: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表的Severity列中显示平均值。 您翻译的查询看起来与此类似:
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
AVG([Extent1].[Severity]) AS [A1]
FROM [dbo].[ValnerabilityAlertDocuments] AS [Extent1]
) AS [GroupBy1]
您也可以尝试使用SQL Server Profiler
等工具更新: 只需将LinqPad添加到工具列表中(感谢Dismissile)
答案 1 :(得分:0)
Select Average(x.Severity)
From VulnerabilityAlertDocuments x
假设您的表名为“VulnerabilityAlertDocuments”
再试一次