Använder du hemska dataset så kan du ju alltid lösa det :/
I vilket sammanhang, varför kan du inte ha en explicit relation mellan kundobjekt och orderobjekt
7 svar · 703 visningar · startad av Lukaspojken
Är det möjligt att joina två objektkollektioner på ett bra sätt. LINQ vill jag inte använda mig av.
Alltså, det jag skulle vilja är att kollektionen kunder joinas ihop med kollektionen ordrar.
Kundobjektet ser ut ungefär så här:
CustomerId
Name
...
Orderobjektet ser ut så här:
Id
CustomerId
Använder du hemska dataset så kan du ju alltid lösa det :/
I vilket sammanhang, varför kan du inte ha en explicit relation mellan kundobjekt och orderobjekt
Nix, jag använder mig inte av dataset. Kan du exemplifiera vad du menar med explicit relation?
Kan du inte sköta detta under inläsningen av data?
Att din klass Order har en referens till Customer, eller vice versa, eller en 1-1 relation om det är hur du vill modellera din värld :)
-> erka
Det finns en referens på orderobjektet till kundobjektet genom att det finns ett kundid. Så på det sättet kan jag enkelt se vilken order som tillhör vilken kund. Men om jag på ett enkelt sätt skulle vilja få reda på vilka ordrar en kund har så måste jag loopa igenom hela orderkollektionen. Det ser inte så snyggt ut :) Bland annat därför skulle jag vilja ha en relation mellan dessa.
-> Nickemannen
Hur menar du att jag ska skapa relationen under inläsningen?
Lukaspojken skrev:
Men om jag på ett enkelt sätt skulle vilja få reda på vilka ordrar en kund har så måste jag loopa igenom hela orderkollektionen. Det ser inte så snyggt ut :)
Om du kör på din nuvarande struktur blir du tvungen att göra det, och anledningen till att det inte ser snyggt ut är för att det inte är snyggt ;) Hur du än slår in allting kommer det fortfarande göras samma sak i bakgrunden, och har du många objekt då, blir det långsamt.
Som erka säger borde du fixa det under inläsningen. Det vettigaste vore att du gjorde en metod som hämtar ordrar för en specifik kund, eller om du vill göra allt i bulk, antingen att du byter ut CustomerId i Order-klassen mot en referens till ett Customer-objekt, eller att du istället för att returnera en lista på ordrar, returnerar en IDictionary<Customer, IList<Order>> där du mappar varje kund mot en lista på deras ordrar.
lukaspojken skrev:
Det finns en referens på orderobjektet till kundobjektet genom att det finns ett kundid. Så på det sättet kan jag enkelt se vilken order som tillhör vilken kund. Men om jag på ett enkelt sätt skulle vilja få reda på vilka ordrar en kund har så måste jag loopa igenom hela orderkollektionen. Det ser inte så snyggt ut
Det är mest kosmetika. För hur du än vänder och vrider på det, så måste .NET motor, ju loopa igenom din lista för att kunna kontrollera vilka ordera som har vilket kundnr. Så om du gör det själv, eller fixar någon referens som låter .NET göra det till dig spelar inte så stor roll, arbetet är ju ändå detsamma.
Sedan kanske det finns snyggare lösningar, än just att loopa igenom varje objekt, du kan ju använda dig av .Find() metoder på dina listor. Det ser ju snyggare ut med följande kod.
List<Order> ordersForThisCustomer = allOrders.Find(delegate(Order o){return o.KundId = kundId;});
Än.
List<Order> ordersForthisCustomer = new List<Order>();
for(int i = 0; i < allOrders.Count; i++)
{
if(allOrders[i].Kundid == kundId)
ordersForThisCustomer.Add(allOrders[i]);
}
Men resultatet blir det samma, och själva arbetet är ju ganska mycket det samma, så någon jättestor prestandavinst lär du inte få ut av det...
- M