2014-06-06 5 views
0

인 두 테이블에 대한 LINQ 날짜 범위에 대해 ITEMRESERVED 테이블에 예약되지 않은 ITEM 테이블의 항목을 가져 오기 위해 LIQ의 올바른 구문과 관련된 문제가 있습니다.두 테이블 사이의 날짜 범위가

For Example: Item contain: 
ItemID ItemName 
1  A 
2  B 
3  C 


ItemReserved Contains: 
ID  ItemID StartDate EndDate 
1  1   06/06/14 07/06/14 

테이블 정의 : 다음 검색 정보를 바탕으로

CREATE TABLE [dbo].[Item](
[ItemID] [int] NOT NULL, 
[ItemName] [varchar](8) NOT NULL, 

PRIMARY KEY CLUSTERED 
(
[ItemID] ASC 
) 

CREATE TABLE [dbo].[ItemReserved](
[ID] [int] NOT NULL, 
[ItemID] [int] NOT NULL, 
[StartDate] [smalldatetime] NOT NULL, 
[EndDate] [smalldatetime] NOT NULL, 

PRIMARY KEY CLUSTERED 
(
[ID] ASC 
) 

[FK_ItemReserved] FOREIGN KEY([ItemID]) 
REFERENCES [dbo].[Items] ([ItemID]) 

: 07-06-14 & 06-06-14 사이에 예약되지에서

이 항목 테이블의 모든 항목을 선택

코드 :

var StartDate = DateTime.Now; 
var EndDate = DateTime.Now.AddDays(1); 

var query = from i in db.Ttem 
      join ir in db.ItemReserved 
      //on i.ItemID equals ir.ItemId - This line brings back the data that is reserved 
      on i.ItemID (??? !=) ir.ItemId 
      where i.ItemID == ir.ItemID //&& (Dates <= Start and >= End) 
      select i; 

이 코드는 날짜에 예약 된 항목을 선택하는 데 사용되지만 역순으로 필요하지는 않습니다. 예약되지 않은 항목은 무엇입니까?

var StartDate = dpStartDate.SelectedDate.Value; 
var EndDate = dpEndDate.SelectedDate.Value; 

//LINQ - To get all cars from database 
var query = from i in db.Item 
      join ir in db.ItemReserved 
      on i.ItemID equals ir.ItemID 
      where i.ItemID == ir.ItemID && ((StartDate >= b.StartDate) && (EndDate <= b.EndDate)) 
      select i; 

답변

0

이 같은 것을 시도 할 수 :

// Declaration of start and end date. 
var StartDate = DateTime.Now; 
var EndDate = DateTime.Now.AddDays(1); 

// Get the items in db.Ttem that are reserved in the time period 
// between StartDate and EndDate. 
var query = from i in db.Ttem 
      join ir in db.ItemReserved 
      on i.ItemID equals ir.ItemId 
      where ir.StarDate >= Start && ir.EndDate<= End 
      select i.ItemID; 

// Get the items in db.Ttem that are not reserved in the time period 
// between StartDate and EndDate. 
var result = db.Ttem.Where(x=>!query.Contains(x)); 
+0

정말 감사합니다. 그건 대접이야. – user3715220

+0

@ user3715220 당신을 환영합니다! 내가 도울 수있어서 기뻐. – Christos