2009-08-24 36 views
1

我有兩個表這樣我怎麼能做這個查詢 - LINQ to SQL?

Table Product 

ProductId - int <PK> 
ProductExpiry - TimeDate 
AlertOfExpiry - int 
ProductTypeId - int<Fk> 

Table ProductType 
ProudctTypeId - int <PK> 
Name - varchar(50) 

現在我想要得到的產品即將到期的清單。所以,我試圖做的是

說今天的日期是今天8月24日和產品的到期日是28和4天的到期日設置。

So 28 - 4 = 24 (show in list on 24th) 

但是我也想讓「Name」包含在ProductTypeTable中的輸出中。

這是我到目前爲止。

var grab = dbContext.Product.Where(u => u.ProductExpiry.addDays(Convert.ToDouble(u.AlertOfExpiry)) >= DateTime.Now) 

所以首先我不知道如何得到addDays中的減號( - ),因爲它已經很雜亂了。

我後來不知道怎麼從那裏去看看那些發現結果並轉到ProductType並獲得名字。

我覺得莫名其妙的,其中一部分會是這樣(grab.ProducttypeId == grab.ProductTypeid)//取得名稱。

因此,誰能幫助我。另外我怎樣才能使它更清潔一點?

回答

1

什麼是這樣的:

var grab = dbContext.Product 
.Where(u => (u.ProductExpiry.Month == DateTime.Now.Month) && 
    (u.ProductExpiry.Day <= (DateTime.Now.Day + 4))) 

像這樣的東西應該工作爲您的產品類型

foreach(Product prod in grab) 
{ 
    var grabProductType = dbContext.ProductType 
     .Where(pt => pt.ProductTypeId == prod.ProductTypeId); 
} 

注:我沒有測試過這一點。

+0

我會嘗試,但如何得到productTypeId後? – chobo2 2009-08-25 00:22:53

+0

當一個連接完成時,不需要迭代兩次。 – jeremyalan 2009-08-28 14:42:10

+0

@ Ph0enix-謝謝,還在學習LINQ。我主要做了非常簡單的表達 – 2009-08-28 18:40:10

1

PHSR的的回答可以進一步縮短,避免每月檢查.. 我們的新的查詢將

var grab = dbContext.Product 
.Where(u => (u.ProductExpiry <= DateTime.Now.AddDays(4))) 
0

我做我與LINQ to SQL的應用程序類似的東西。

我使用一個:

var grab = dbContext.Product.Where(u => u.ProductExpiry. >= DateTime.Today.AddDays(4) 
1

我精通C#,ASP.NET沒有,所以我道歉,如果有任何差異。希望你至少可以得到它的要點。

var query = 
    from Product p in db.Products 
     join ProductType pt in db.ProductTypes 
     on p.ProductTypeId equals pt.ProductTypeId 
    where (DateTime.Now 
     .AddDays (p.AlertExpiry) 
     .CompareTo (p.ProductExpiry) > 0) 
    select new {Product = p, ProductType = pt}; 

foreach(var item in query) 
{ 
    // Now, you can use the following for each product: 
    // item.Product 
    // item.ProductType 
}