Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
49 个问题
您好, 我想在 linq 或 lambda EF core 中编写此查询
SELECT LAG(id) OVER ( ORDER BY ID ) AS PreviousWord ,ID ,LEAD(id) OVER ( ORDER BY ID ) AS NextWord FROM sales
请帮忙
Note:此问题总结整理于:How write this query in EF Core or Linq
根据 SQL 命令,我创建了一个包含以下数据的表,并修改了 SQL 查询命令以在使用 LAG 和 LEAD 函数时设置默认值:
然后,为了使用 EF core 获得相同的结果,我们可以使用以下代码:
var result = _context.Sales.OrderBy(d => d.ID).Select(c => new
{
ID = c.ID,
PreviousId = _context.Sales.OrderBy(i => i.ID).Where(i => i.ID < c.ID).Select(i=>i.ID).LastOrDefault(),
NextId = _context.Sales.OrderBy(i => i.ID).Where(i => i.ID > c.ID).Select(i => i.ID).FirstOrDefault(),
}).ToList();
销售模式:
public class Sale
{
[Key]
public int ID { get; set; }
public int SalesAmountQuota { get; set; }
public DateTime QuotaDate { get; set; }
}
此外,我们还可以使用扩展方法来执行 SQL 查询命令。FromSqlRaw
根据 SQL 查询结果创建模型:
public class SaleViewModel
{
public int ID { get; set; }
public int PreviousWord { get; set; }
public int NextWord { get; set; }
}
添加到 ApplicationDbContext:
public class ApplicationDbContext: DbContext
{
public DbSet<Sale> Sales { get; set; }
public DbSet<SaleViewModel> SaleViewModels { get; set; }
然后,启用迁移以生成相关表,之后,在控制器中,使用以下代码获取结果:
var sqlresult = _context.SaleViewModels
.FromSqlRaw("SELECT ID ,LAG(ID,1,0) OVER ( ORDER BY ID ) AS PreviousWord , LEAD(ID,1,0) OVER ( ORDER BY ID ) AS NextWord FROM sales")
.Select(c=> new { ID = c.ID, PreviousID = c.PreviousWord, NextId = c.NextWord })
.ToList();
结果如下:
如果答案有帮助,请点击“接受答案”并点赞。 注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。