Hej!
Jag har collection med Customer-objekt i. Från annat håll får jag en List med Customer-ID:en. Nu måste jag jämföra dessa. Om customer-id:et från listan inte finns i collectionen så måste jag behandla dessa CustomerID:en.
Koden nedan borde väl fungera principiellt, men borde det inte gå att lösa enklare och snyggare? LINQ?
foreach(int i in CustomerIDList)
{
foreach (Customer cust in CustCollection)
{ if cust.CustomerID== i
{
//Gör saker
break;
}
}
}
CatZMedlem sedan jan. 20022 440 inlägg foreach(int i in CustomerIDList)
{
var customer = CustCollection.Where(c => c.CustomerID == i).FirstOrDefault();
// do stuff with customer....
}
Det kan förenklas mer ändå men jag orkar inte nu!
TomasJMedlem sedan feb. 200563 inlägg
invecklaren skrev:
Hej!
Jag har collection med Customer-objekt i. Från annat håll får jag en List med Customer-ID:en. Nu måste jag jämföra dessa. Om customer-id:et från listan inte finns i collectionen så måste jag behandla dessa CustomerID:en.
Koden nedan borde väl fungera principiellt, men borde det inte gå att lösa enklare och snyggare? LINQ?
foreach(int i in CustomerIDList)
{
foreach (Customer cust in CustCollection)
{ if cust.CustomerID== i
{
//Gör saker
break;
}
}
}
Så här kan du göra med LINQ:
var customer =
(from cust in CustCollection
from i in CustomerIDList
where cust.CustomerID == i
select cust).FirstOrDefault();
if (customer != null)
{
//Gör saker
}
/ Tomas
spangoMedlem sedan juni 20008 205 inlägg
invecklaren skrev:
Jag har collection med Customer-objekt i. Från annat håll får jag en List med Customer-ID:en. Nu måste jag jämföra dessa. Om customer-id:et från listan inte finns i collectionen så måste jag behandla dessa CustomerID:en.
Förstår jag frågan fel, eller vill du ha fram alla ID:n ur CustomerIDList som inte motsvarar ett objekt i CustCollection? I sådana fall blir det så här:
var orphanedIds = new HashSet<int>(CustomerIDList);
orphanedIds.ExceptWith(from c in CustCollection select c.CustomerID);
Nu innehåller orphanedIds alla ID:n i CustomerIDList som inte motsvarar en kund i CustCollection.
TomasJMedlem sedan feb. 200563 inlägg Efter att ha läst Spangos kommentar så kan jag konstatera att jag inte läste frågan tillräckligt noggrant, men tycker inte heller att kodexemplet i frågan motsvarar den formulerade frågan (om jag nu har förstått frågan denna gången alltså...) och jag tror att den ursprungliga koden med två nästlade loopar måste modifieras ungefär så här för att åtminstone överensstämma med frågan:
foreach(int i in CustomerIDList) {
bool idWasFound = false;
foreach (Customer cust in CustCollection) {
if( cust.CustomerID == i) {
idWasFound = true;
break;
}
}
if (!idWasFound) {
//Gör saker
}
}
Det finns många alternativa sätt att implementera ovanstående på, och här är en variant:
CustomerIDList.Where(i => !CustCollection.Exists(cust => cust.CustomerID == i)).ToList().ForEach(
i => {
//Gör saker
}
);
/ Tomas