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!
5 svar · 642 visningar · startad av invecklaren
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;
}
}
}
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!
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
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.
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
felpost