我有两张这样的表
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)//以某种方式获取名称。
所以任何人都可以帮助我。另外我怎么能让它更干净?
答案 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)