如何进行此查询 - LINQ to SQL?

时间:2009-08-24 23:33:55

标签: asp.net asp.net-mvc 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并获取名称。

我认为where部分会是什么样的(grab.ProducttypeId == grab.ProductTypeid)//以某种方式获取名称。

所以任何人都可以帮助我。另外我怎么能让它更干净?

4 个答案:

答案 0 :(得分: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);
}

注意:我没有测试过这个。

答案 1 :(得分:1)

phsr的答案可以进一步缩短,避免月检。 我们的新查询将是

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

答案 2 :(得分: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
}

答案 3 :(得分:0)

我在使用linq to sql的应用程序中做了类似的事情。

我用那个:

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