如何在Linq中转换sql查询
本文关键字:转换 sql 查询 Linq | 更新日期: 2023-09-27 18:11:46
我正在尝试将SQL查询转换为Linq
查询为:
SELECT Distinct(InvoiceID)
FROM Invoices
WHERE ((DATEDIFF(day, InvoiceDate, GETDATE()) > PaymentDays) AND
status= 'false')
我写了下面的代码,但没有得到适当的结果....
var outstanding = db.Invoices.Where(t =>
(t.InvoiceDate.Value.Subtract(DateTime.Today)).Days > t.PaymentDays.Value
&& !(bool)t.Status)
在我看来,DATEDIFF在LINQ中没有合适的等同SQL
我发现你写的代码有几个问题。
- LinqToSql不支持
DateTime.Subtract
,对于这种操作,你需要SqlMethods.DateDiffDay
docs。 - 字符串"false"不能转换为布尔值,您需要使用
bool.Parse
或只是与字符串"false"进行比较,就像您在原始中所做的那样。 - 您的原件获得发票id的不同列表。这在你的LINQ尝试中是完全缺失的。在LINQ中添加
.Select(t => t.InvoiceID).Distinct()
DATEDIFF(day, InvoiceDate, GETDATE()) > PaymentDays
应该翻译成
DateTime.Today.AddDays(-1*PaymentDays) > InvoiceDate
这应该获取你需要的
var outstanding = db.Invoices.Where(t => t.InvoiceDate.Value.AddDays(t.PaymentDays.Value) > DateTime.Today).Where(u => u.Status.Equals("false")).Select(v => v.InvoiceID).Distinct();