2009-08-24 7 views
1

J'ai deux tables comme celui-ciComment pourrais-je faire cette requête - LINQ to SQL?

Table Product 

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

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

Maintenant, je veux obtenir une liste de produits qui arrive bientôt à expiration. Donc, ce que j'essaie de faire est

Dites date d'aujourd'hui est le 24 août et une date d'expiration d'un produit est de 28 et une date d'expiration de 4 jours est fixée.

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

Mais je veux également que le "Nom" soit inclus avec la sortie qui se trouve dans ProductTypeTable.

C'est ce que j'ai jusqu'à présent.

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

Alors d'abord je ne suis pas sûr de savoir comment obtenir le moins (-) dans les AddDays car il est déjà tellement en désordre. Je ne sais pas comment aller à partir de là et regarder les résultats trouvés et aller à la ProductType et obtenir les noms.

Je pense que la partie où serait comme (grab.ProducttypeId == grab.ProductTypeid) // saisir les noms en quelque sorte.

Donc, quelqu'un peut-il m'aider. Aussi, comment puis-je le rendre un peu plus propre?

Répondre

1

Qu'en est-il quelque chose comme ceci:

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

Quelque chose comme cela devrait fonctionner pour votre type de produit

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

Note: Je n'ai pas testé.

+0

Je vais essayer cela, mais que diriez-vous d'obtenir le productTypeId après? – chobo2

+0

Pas besoin de répéter deux fois, quand une jointure ferait l'affaire. – jeremyalan

+0

@ Ph0enix- Merci, encore apprentissage LINQ. J'ai surtout fait des expressions très simples –

1

réponse de phsr peut être raccourci vérifier éviter d'autres mois .. notre nouvelle requête serait

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

Je suis en train de faire quelque chose de semblable dans ma demande avec LINQ to SQL.

J'utilise que l'un:

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

Je suis couramment en C#, ASP.NET pas, donc je me excuse s'il y a des divergences. J'espère que vous pourrez au moins en avoir l'essentiel.

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 
}