2009-08-24 64 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 
}