---
title: "Leta i collection"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/178228-leta-i-collection"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "invecklaren"
published: "2009-04-22T14:57:31.000Z"
updated: "2009-04-23T20:24:26.000Z"
replies: 5
views: 658
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/178228-leta-i-collection"
---

# Leta i collection

## #1 — invecklaren, 2009-04-22T14:57Z

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;
                   }
               
           }
     }
```

Permalänk: https://www.webforum.nu/p/178228

## #2 — CatZ, 2009-04-22T17:13Z

```
 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!

Permalänk: https://www.webforum.nu/p/2182774

## #3 — TomasJ, 2009-04-22T23:37Z

> **[invecklaren skrev:](https://www.webforum.nu/p/1465427)**
>
> 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

Permalänk: https://www.webforum.nu/p/2182796

## #4 — spango, 2009-04-23T08:47Z

> **[invecklaren skrev:](https://www.webforum.nu/p/1465427)**
>
> 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.

Permalänk: https://www.webforum.nu/p/2182835

## #5 — TomasJ, 2009-04-23T19:11Z

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

Permalänk: https://www.webforum.nu/p/2182928

## #6 — clarkbones, 2009-04-23T20:24Z

felpost

Permalänk: https://www.webforum.nu/p/2182931

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/178228-leta-i-collection
