Как я могу сделать этот запрос - LINQ to SQL? - PullRequest
1 голос
/ 25 августа 2009

У меня есть две таблицы, подобные этой

Table Product

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

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

Теперь я хочу получить список продуктов, срок действия которых скоро истечет. Итак, что я пытаюсь сделать, это

Скажите, что сегодняшняя дата - сегодня 24 августа, а срок годности продукта - 28, и установлена ​​4-дневная дата истечения срока действия.

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

Но я также хочу, чтобы "Имя" было включено в вывод, который находится в ProductTypeTable.

Это то, что я имею до сих пор.

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

Итак, во-первых, я не уверен, как получить минус (-) в addDays, так как он уже такой грязный.

Тогда я не знаю, как пойти оттуда, посмотреть на найденные результаты, перейти к ProductType и получить имена.

Я думаю, что часть where будет похожа (grab.ProducttypeId == grab.ProductTypeid) // как-то захватить имена.

Так что кто-нибудь может мне помочь. Кроме того, как я могу сделать это немного чище?

Ответы [ 4 ]

1 голос
/ 28 августа 2009

Я свободно говорю на 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
}
1 голос
/ 25 августа 2009

phsr ответ может быть сокращен, чтобы избежать проверки месяца. наш новый запрос будет

var grab = dbContext.Product
.Where(u => (u.ProductExpiry <= DateTime.Now.AddDays(4)))
1 голос
/ 25 августа 2009

Что-то вроде этого:

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 голосов
/ 28 августа 2009

Я делаю нечто подобное в моем приложении с linq to sql.

Я использую это:

var grab = dbContext.Product.Where(u => u.ProductExpiry. >= DateTime.Today.AddDays(4)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...