Dies ist eine schnelle Schätzung, was ich aus Ihrer Frage extrapolieren kann. Es kann oder kann nicht korrekt sein:
var dc = new MyDataContext();
var qry = from customer in dc.Customers
where customer.Orders.Description.Contains("special")
&& customer.Orders.OrderDate > myMinDate
&& customer.Orders.OrderDate < myMaxDate
order by customer.Orders.OrderDate ascending
select customer;
Es soll durch eine Min- und Max-Datum durch ihre Auftragsdaten, gefiltert bestellten Kunden Objekte zurück. Diese beiden Zeilen können entfernt werden, wenn Sie nicht nach Datum filtern möchten.
Erwarten Sie die Kunden zu wiederholen. Wenn Sie nicht wiederholen möchten, fügen Sie eine group by-Klausel hinzu.
Viel Glück damit, berichten Sie, wie gut es funktioniert. :)
Edit:
Danke, Randolpho, das Problem ist, dass ich nicht myMinDate und myMaxDate. Ich muss in der Lage sein, die Beschreibung der ältesten Reihenfolge zu überprüfen. Ich habe das Gefühl, dass ich etwas wie c.Orders.Where (x => x.OrderDate.Max()) verwenden sollte, aber nicht die gesamte Abfrage richtig schreiben kann. Vielen Dank. - Valentin Vasiliev
Hmm ... Ich kann nicht sagen, wenn Sie die Kunden mit dem ältesten Auftrag wünschen und dass Sie die Beschreibung überprüfen wollen oder wenn Sie wollen die Kunden mit dem ältesten damit hat das Wort "special" in der Beschreibung der Bestellung.
Wenn Sie den Kunden mit dem ältesten Auftrag wollen und dann die Beschreibung überprüfen, können Sie etwas tun sollten:
var qry = from customer in dc.Customers
order by customer.Orders.OrderDate ascending
select new
{
CustomerData = customer,
OrderDescription = customer.Orders.Description
};
var oldest = qry.First();
if(oldest.OrderDescription.Contains("special"))
{
// do something
}
In diesem Szenario älteste ein neuer anonymer Typ ist, hat zwei Felder, CustomerData, die den Kunden mit der ältesten Bestellung enthält, und OrderDescription, die das Beschreibungsfeld der ältesten Bestellung enthält.
Auf der anderen Seite möchten Sie vielleicht die älteste Reihenfolge, die das Wort "Spezial" enthält. In diesem Fall sollten Sie etwas tun:
var qry = from customer in dc.Customers
where customer.Orders.Description.Contains("special")
order by customer.Orders.OrderDate ascending
select customer;
var oldestCustomerWithSpecial = qry.First();
In diesem Szenario wird der Kunde mit dem ältesten Datensatz, der das Wort „speziellen“ in der Beschreibung enthält, ist in der Variable mit dem Namen oldestCustomerWithSpecial.
Ich glaube nicht, dass die Verwendung von Max on OrderDate Ihnen helfen wird. Sie sind fast immer besser dran, wenn Sie eine TOP-1-Anfrage nach Datum sortieren. Rufen Sie First() für die Abfrage auf.
Dies sollte Ascending statt Descending sein. –
Ja, aber das ist unbedeutend, der Algorithmus ist richtig, was wichtiger ist. – Valentin
Ja, ich weiß, dass es geringfügig war - deshalb habe ich es kommentiert und abgestimmt :) –