webForumDet fria alternativet

Joina två objektkollektioner?

.NETur .NET

7 svar · 703 visningar · startad av Lukaspojken

Medlem sedan maj 20011 312 inlägg
Frågan#1

Ä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

Medlem sedan dec. 19996 522 inlägg
#2

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

Medlem sedan maj 20011 312 inlägg
#3

Nix, jag använder mig inte av dataset. Kan du exemplifiera vad du menar med explicit relation?

Medlem sedan aug. 20003 575 inlägg
#4

Kan du inte sköta detta under inläsningen av data?

Medlem sedan dec. 19996 522 inlägg
#5

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 :)

Medlem sedan maj 20011 312 inlägg
#6

-> 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?

Medlem sedan juni 20008 205 inlägg
#7

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.

Medlem sedan maj 20012 812 inlägg
#8

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

131 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)