2012-04-27 43 views
2

這是我的查詢:不介於與LINQ to SQL的

var model = (from p in entity.vehicule 
      join y in entity.indisponible on p.Matv equals y.idv 
      where p.agence.idgov == idv && (!(dd1 >= y.Dd && dd1 <= y.Df) || !(df1 >= y.Dd && df1 <= y.Df)) 
      select p).ToList(); 

我有很多方法試圖寫這個部分:

(!(dd1 >= y.Dd && dd1 <= y.Df) || !(df1 >= y.Dd && df1 <= y.Df)) 

這樣(這是它如何成爲看在SQL):

(dd1 Not Between Date(y.dd) And Date(y.dF)) OR (df1 Not Between Date(y.dd) And Date(y.df)) 

DD1是日期(從),DF1是日期(到)。

我想我在這裏失蹤的東西:(

+0

你的問題是什麼? – Harm 2012-04-27 13:34:55

+0

@Harm我認爲這是安全的假設查詢不起作用:) – dasblinkenlight 2012-04-27 13:35:51

+3

Chlebta,你可以發佈你嘗試運行你的LINQ語句時得到的錯誤嗎?或者描述結果如何不準確?另外,變量dd1和df1在你的應用程序中有什麼意義? – 2012-04-27 13:36:02

回答

5

編輯2:許多意見後,希望這是你的結果後

public IList<Car> GetCarsAvailable(DateTime fromDate, DateTime toDate) 
{ 
    var result = from c in dataContext.Cars 
       where !c.Bookings.Any(b => (fromDate >= b.From && fromDate <= b.To) || (toDate >= b.From && toDate <= b.To)) 
       select c; 

    return result.ToList(); 
} 

編輯1

如果我們稍微改變它,而不是檢查生日,我們會檢查favourite days。不要讓我們假設一個人可以有多個最喜歡的日子,並且我們希望選擇每天沒有最喜歡的日子的人,即在兩天內。讓我們進一步編寫了我們的假設:

  • Richard最喜歡的日子,5 May 201210 September 2012
  • Amy最喜歡的日子,8 August 201212 December 2012
  • Matthews「最開心的日子就是30 October 2012

然後讓我們說,我們希望找到所有在1 May 2012和之間沒有最喜歡的日子的人;我們的結果輸出應該只是Matthew,我們可以這樣寫:

public IList<Person> GetPeopleWhoDontHaveAnyFavouriteDate(DateTime fromDate, DateTime toDate) 
{ 
    var result = from p in dataContext.People 
       where !p.FavouriteDates.Any(f => f.Date >= fromDate && f.Date <= toDate) 
       select p; 

    return result.ToList(); 
} 

什麼上面的說法是說,是我們要選擇所有的人,但前提是他們最喜愛的日期none是兩個日期之間。

或者我們可以說,讓我們選擇一個人,如果他們的日期超出了範圍。因此,假如我們想從1 May 2012進行檢查,1 November 2012,所以我們的結果集現在RichardAmy,這可以實現像這樣:

public IList<Person> GetPeopleWhoDontHaveFavouriteDate(DateTime fromDate, DateTime toDate) 
{ 
    var result = from p in dataContext.People 
       where p.FavouriteDates.Any(f => f.Date < fromDate || f.Date > toDate) 
       select p; 

    return result.ToList(); 
} 

原始

我發現它非常棘手讀你縮寫變量,所以我希望你不介意,但我想我會寫一個快速演示如何做一個「不在」兩個日期

我認爲你的事情是正確的。以下是您可以採取的幾種方法。以下方法執行相同的操作,但會檢查反函數。

public IList<Person> GetPeopleNotBornFromTo(DateTime fromDate, DateTime toDate) 
{ 
    var result = from p in dataContext.People 
       where p.DateOfBirth < fromDate || p.DateOfBirth > toDate 
       select p; 

    return result.ToList(); 
} 

public IList<Person> GetPeopleNotBornFromTo2(DateTime fromDate, DateTime toDate) 
{ 
    var result = from p in dataContext.People 
       where !(p.DateOfBirth >= fromDate && p.DateOfBirth <= toDate) 
       select p; 

    return result.ToList(); 
} 
+0

你能解釋更多,因爲我使用加入,所以我不知道如何將這包括在我的代碼? – Chlebta 2012-04-27 14:13:56

+0

我已更新帖子以更好地反映您可能會如何檢查子實體。 – Richard 2012-04-27 14:39:37

+0

謝謝,但問題是我沒有可用的日期(從 - 到),我不得不檢查我的日子是否在這個不可用的日期,opossite你已經寫了。你可以檢查我的帖子,我有更新它 – Chlebta 2012-04-27 15:31:35