如何将这个复杂的实体框架查询转换为标准的SQL查询?具体做什么
本文关键字:查询 SQL 标准 什么 转换 复杂 实体 框架 | 更新日期: 2023-09-27 17:51:12
我没有。net 实体框架的经验,我必须了解到底是什么做这个实体框架查询和翻译在经典SQL (Microsoft SQL server)
所以我有这个查询:
using (MyCorp.EarlyWarnings.Model.EarlyWarningsEntities context = new Model.EarlyWarningsEntities())
{
DBContext.SetTimeout(context);
float vulnerabilities_thisweek = (from x in context.VulnerabilityAlertDocuments
.Select(p => new { p.Id, p.Published, p.Title, p.Severity, p.LastUpdated })
.AsEnumerable()
.Select(p => new MyCorp.EarlyWarnings.Model.VulnerabilityAlertDocument()
{
Id = p.Id,
Published = p.Published,
Title = p.Title,
Severity = p.Severity,
LastUpdated = p.LastUpdated
})
.Where(p => p.LastUpdated.Date > DateTime.Now.AddDays(-7).Date)
select x).Count();
}
我知道这个查询在我的数据库上的结果是-1,00(我知道执行这个查询的信息)
我也知道这个查询在单个表上工作(或者至少我认为是这样,如果我说错了的话是正确的),因为我在上下文中有from x。VulnerabilityAlertDocuments和在EarlyWarningsEntities类中,我发现这个属性映射了名为DbSet对象上名为VulnerabilityAlertDocuments的数据库表VulnerabilityAlertDocument:
public DbSet<VulnerabilityAlertDocument> VulnerabilityAlertDocuments { get; set; }
所以我认为我的SQL查询只能在VulnerabilityAlertDocument数据库表上工作。
我无法理解在其中条件使用=>"操作符"时究竟做了什么,我试图在谷歌上搜索,但我找不到任何
在理解AsEnumerable()方法调用. select()结果时,我也有一些困难。
阅读文档在我看来,第一个。select()方法返回给我一组行,然后它被称为AsEnumerable()方法在这个集合上有一个迭代器,但我不确定,你确认还是错了?
然后它执行第二次选择,我不明白是什么(在我看来,表是相同的)
有人可以帮助我了解到底是什么做这个查询,我如何在标准SQL转换它?
Tnx
您的查询正在创建一个匿名类型只是为了什么,我还没有测试过,但我认为下面的东西会产生相同的结果:
float vulnerabilities_thisweek = (from x in context.VulnerabilityAlertDocuments
.Where(p => p.LastUpdated > DateTime.Now.AddDays(-7))
.Count();
}
我也建议你看看LinqPad,你可以测试你的linq查询,并看到相应的sql语句
对于COUNT查询来说,这似乎过于复杂了。
从我看到的,这可以翻译成:
SELECT COUNT(*) FROM VulnerabilityAlertDocuments WHERE DateDiff(day, LastUpdated, GetDate()) < 8