2011-10-18 64 views
3

我想要一个SQL查询转换为LINQ的查询如何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

+4

那是一个大量的工作,你至少应该尝试一下之前 - 在此处查看示例http://msdn.microsoft.com/ EN-US/vcsharp/aa336746 – Marc

+1

我们不会再考代码 – Frederiek

+1

您是否尝试过LinqPad这将有助于创建SQL和LINQ查询? – Prasanth

回答

1

我看到的几个问题用你写的代码。

  • LinqToSql不会支持DateTime.Subtract,对于这种操作就需要SqlMethods.DateDiffDaydocs
  • 字符串“false”不能转换为一个布尔值,你需要要么使用bool.Parse或只是比较字符串“假”如你在原来的一样。
  • 你原来获得发票的ID的不同列表。这完全是你的LINQ尝试所缺少的。将.Select(t => t.InvoiceID).Distinct()附加到您的LINQ。
0
DATEDIFF(day, InvoiceDate, GETDATE()) > PaymentDays 

应该翻译成

DateTime.Today.AddDays(-1*PaymentDays) > InvoiceDate 

UPDATE

这应该获取你所需要的

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(); 
+1

LinqToSql不会支持任何一个日期时间加/减方法。这就是'SqlMethods'修复的问题。 – Jamiec

+1

我可以AddDays没有问题,我的基于SQL的日期时间字段...我错过了什么? – Alex

+1

我的不好,它的所有不工作的datesiff方法(因此我的答案中链接了'SqlMethods'的存在)。 – Jamiec