2009-08-24 12 views
1

Ich habe zwei Tabellen wie dieseWie könnte ich diese Abfrage machen - LINQ to SQL?

Table Product 

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

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

Jetzt möchte ich eine Liste der Produkte erhalten, die bald auslaufen. Also was ich versuche zu tun ist

Sage das heutige Datum ist heute 24. August und ein Verfallsdatum eines Produkts ist 28 und ein 4-tägiges Verfallsdatum ist gesetzt.

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

Aber ich möchte auch den "Name" mit der Ausgabe, die in der ProductTypeTable ist enthalten sein.

Das ist was ich bisher habe.

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

Also zuerst bin ich nicht sicher, wie das Minus zu bekommen (-) in der AddDays da es schon so chaotisch ist.

Ich weiß dann nicht, wie man von dort geht und schauen Sie sich die gefundenen Ergebnisse an und gehen Sie zum ProductType und holen Sie sich die Namen.

Ich denke, der Teil wäre wie (Grab.ProducttypeId == Grab.ProductTypeid) // schnappen Sie sich die Namen irgendwie.

So kann mir jemand helfen. Auch wie kann ich es ein bisschen sauberer machen?

Antwort

1

Was ist so etwas wie dieses:

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

So etwas sollte für Produkttyp arbeiten

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

Anmerkung: Ich habe nicht getestet.

+0

Ich werde versuchen, aber wie wäre es, würde ich die ProductTypeId nach? – chobo2

+0

Keine Notwendigkeit, zweimal zu wiederholen, wenn ein Join den Trick tun würde. – jeremyalan

+0

@ Ph0enix- Danke, LINQ immer noch lernen. Ich habe hauptsächlich sehr einfache Ausdrücke gemacht –

1

der PHSR Antwort kann weiter Monat Prüfung verkürzt werden vermieden .. unsere neue Abfrage

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

ich etwas ähnliches mit LINQ to SQL in meiner Anwendung tue wäre.

ich, dass man:

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

Ich bin in C# fließend, nicht ASP.NET, so dass ich entschuldige mich, wenn es Abweichungen gibt. Hoffentlich können Sie zumindest das Wesentliche davon verstehen.

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 
}