如何解决如何在 Entity Framework 6 中将 SQL 查询转换为 Linq?
如何将此 SQL 查询转换为 linq 表达式?
Select distinct Clients.Id
From Clients
Join Orders On Clients.Id = Orders.ClientsId and Orders.Date < DATEADD(DD,-Clients.Term,CAST(GETDATE() AS DATE))
是的,我知道 Database.SqlQuery<>()
函数。就性能而言,这可能是最好的解决方案。但是代码统一是首选,所以我需要使用linq。
这是我的解决方案:
var outdatedClients = context.Clients.GroupJoin(context.Orders,client => client.Id,order => order.ClientId,(client,order) => new
{
Id = client.Id,Term = client.Term,Orders = order.Any(order => DbFunctions.DiffDays(order.Date,_datenow) > client.Term)
})
.ToList()
.Where(client => client.Orders == true);
但也许可以做得更优雅?
解决方法
这都是徒手写的,所以如果有一些语法问题,我深表歉意...
假设您使用的是 EF/EFCore,并且您的类的结构类似于以下内容:
public class Client
{
public Guid Id { get; set; }
public int Term { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
public class Order
{
public Guid Id { get; set; }
public Guid ClientId { get; set; }
public DateTime Date {get; set; }
}
那么类似下面的内容应该与您的 SQL 查询相匹配吗?:
var clients = await context.Clients.Include(c => C.Orders)
.Where(c => c.Orders.Any(o => o.Date < DateTime.Now.AddDays(-c.Term)))
.ToArrayAsync();
您也可以区分结果,但假设 'Id' 是 Client
的主键,那么就没有必要,因为它们将是唯一的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。