2013-01-24 117 views
0

因此使用LINQ試圖比較數據庫中的2個值並選擇日期小於今天的整整一年的時間...因此,任何24/1/12之間的內容& 24/1/13將被選中。選擇A其中A <B在LINQ

所以我有...

var selectedObject = 
      (from workstation in db.Work_Station 
      join invoice in db.Invoices on workstation.id equals invoice.Site_Id 
      where InvoiceDate < DateTime.Now.AddYears(-1) 
      select workstation).Distinct().ToList(); 

這是生產列表,但其不正確。 我一直在玩添加年,但似乎無法得到它.. 任何人有任何想法? 謝謝


編輯: 大家好,謝謝你的快速反應。我實際上是由一個輕微的錯誤,我想返回擁有比整整一年的今天更大的發票日期的值。 ....因此,任何日期爲< = 24/1/12將返回。我已經使用你的建議來使用...

DateTime OneYearAgo = DateTime.Now.AddYears(-1);

var selectedObject = 
     (from workstation in db.Work_Station 
     join invoice in db.Invoices on workstation.id equals invoice.Site_Id 
      where InvoiceDate <= OneYearAgo 
     select workstation).Distinct().ToList(); 

這將返回一些發票......其中一些發票是在23/1/12之前,其中一些發票之後。

Iv試圖改變到CurrentInvoiceDate> = OneYAarAgo的位置,它應該返回從現在到一年前的任何日期,但沒有任何返回......我做錯了什麼?請告知...謝謝

回答

2

您的查詢與您的文本解釋相符。但兩者都不符合您的樣本數據。

你想要的是全部數據,其中的日期比大於或等於(不小於)一年前:

var selectedObject = 
      (from workstation in db.Work_Station 
      join invoice in db.Invoices on workstation.id equals invoice.Site_Id 
      where InvoiceDate >= DateTime.Today.AddYears(-1) 
      select workstation).Distinct().ToList(); 

如果有可能,你有發票,在將來的日期,你還需要指定這些發票應小於或等於今天日期:

var selectedObject = 
      (from workstation in db.Work_Station 
      join invoice in db.Invoices on workstation.id equals invoice.Site_Id 
      where InvoiceDate >= DateTime.Today.AddYears(-1) 
       && InvoiceDate <= DateTime.Today 
      select workstation).Distinct().ToList(); 

BTW:你想用DateTime.Today,而不是DateTime.Now
使用DateTime.Now不會返回24/1/12中沒有時間或比現在時間早的時間的發票。

+0

多數民衆贊成非常感謝您的幫助,請參閱我編輯的原始文章 – John

+0

@約翰:比在我的答案中使用第一個查詢。順便說一句:你似乎一直混淆比('>')和小於('<')大。您的編輯再次包含這種困惑。 –

+0

好的謝謝丹尼爾...雖然如果我想在24/1/12之前的日期不應該是<= DateTime.Now.AddYears(-1);(因此小於(在該日期之前)) ...? – John

3

提供你想要的發票屬於日期範圍:

var beginDate = DateTime.Now.AddYears(-1); 
    var endDate = DateTime.Now; 
    var selectedObject = 
      (from workstation in db.Work_Station 
      join invoice in db.Invoices on workstation.id equals invoice.Site_Id 
      where invoice.InvoiceDate >= beginDate && 
        invoice.InvoiceDate <= endDate 
      select workstation).Distinct().ToList(); 
+0

這非常感謝您的幫助,請參閱我編輯的原創帖子 – John

+0

@John我編輯了答案,表明你沒有過濾你的序列。您應該使用發票或工作站實體的財產進行過濾 –

1

的代碼看起來就像這樣......

var selectedObject = 
      (from workstation in db.Work_Station 
      join invoice in db.Invoices on workstation.id equals invoice.Site_Id 
      where InvoiceDate >= DateTime.Now.AddYears(-1) && 
        InvoiceDate <= DateTime.Now 
      select workstation).Distinct().ToList(); 
+0

非常感謝您的幫助,請參閱我編輯的原始文章 – John

+0

看到您必須提供兩個日期,一個是一年前的日期,所以您的發票日期必須大於一年以前的日期,不少於 –

1

我會用一些外部變量的時間,以避免內部操作的DateTime該查詢(有時C#DateTime和SQL DateTime2不相處)。

DateTime timeNow = DateTime.Now; 
DateTime timeToCompare = DateTime.Now.Subtract(new TimeSpan(365, 0, 0, 0)); ; 
var selectedObject = (from workstation in db.Work_Station 
         join invoice in db.Invoices on workstation.id equals invoice.Site_Id 
         where InvoiceDate > timeToCompare 
         select workstation).Distinct().ToList(); 

看看是否有幫助(我有很多疑問做這樣:)

編輯:如下所述,沒有注意到的是,比較有實際要比一年前大。

+0

非常感謝您的幫助,請參閱我的編輯的原始文章--- Iv試過... DateTime OneYearAgo = DateTime.Now.Subtract(new TimeSpan(365,0,0,0)); ..但相同的結果 – John

相關問題