2013-08-12 8 views
5

Chciałem wiedzieć, czy istnieje sposób używania Linq do obiektu, aby uzyskać listę z filtrowania 2 innych list. Mam dwie listy obiektów A i B, są one powiązane między sobą przez atrybut (Code: String). B ma inny atrybut, Nazwa: Łańcuch.Jak utworzyć listę z filtrowania 2 list z linq do obiektu

Chcę uzyskać listę obiektów spełniających 2 warunki.

-Wszystkie obiekty muszą być zgodne z ich atrybucją kodu A. do atrybutu B.Code na liście B.

-B.Nazwa musi być = "yoda";

Próbowałem z tym kodem (i innym exampeles) ale to wydaje się działać i nie wiem dlaczego. Właśnie zaczynam od linQ.

List<A> FilteredAList = (from OneA in ListOfA 
         join OneB in ListOfB 
         on OneA.Code equals OneB.Code 
         where OneB.Name == "yoda" 
         select OneA).ToList<A>(); 

Dzięki z góry !.

+0

Jak to nie działa? –

+0

Przetestowałem to właśnie teraz i otrzymałem 0 wyników, mimo że lista B ma kilka yod, a lista b ma serię kodów pasujących do kodów A. –

+0

Czy mówisz o moim kodzie opublikowanym w mojej odpowiedzi? Jeśli tak, to jestem pewien, że elementy w 'ListOfB' posiadające' .Name = "yoda" 'nie mają' Code' pasujących do żadnego z 'ListOfA'. Oba warunki powinny być wzięte pod uwagę. Możesz opublikować przykładowe dane z 'ListOfB' i' ListOfA', aby móc je przetestować. –

Odpowiedz

5

Z twoim wymaganiem, myślę, że powinniśmy użyć metody Any, dlatego powinniśmy napisać method query nie expression query. Oczywiście nie znam odpowiednika Any w expression query (Przynajmniej powinno być krótkie jak w method query, w przeciwnym razie nie jest dobre). Jeśli ktoś wie, proszę zostaw komentarz. Dziękuję za to.

var FilteredAList = ListOfA.Where(x=>ListOfB.Any(y=>x.Code==y.Code && y.Name=="yoda")) 
          .ToList<A>(); 
Powiązane problemy