2017-02-11 2 views
0

저는 여전히 LINQ를 배우고 있습니다. 한 목록의 개체를 식별자로 사용하여 다른 목록의 개체를 찾으려고합니다.목록을 필터링하기 위해 목록을 사용하는 Linq 쿼리

다음 두 가지 객체 목록이 있습니다. 내 모의 동작 코드와 유사합니다. LINQ를 사용하여 selectedCountry 변수를 사용하여 특정 국가의 플래그 색의 모든 Colors.Hex를 나열하려고합니다.

그래서 SELECTEDCOUNTRY = "미국", 나는 console.write 수있게하려면 :

USA 
RED FF0000 
Blue 0000FF 
White FFFFFF 

바람직 쿼리 구문에서, 가독성을 위해. 사전에

public class Countries 
{ 
    public string Name; 
    public List<string> FlagColors = new List<string>(); 
} 

public class Colors 
{ 
    public string Name; 
    public string Hex; 
} 

public partial class Form1 : Form 
{ 
    public static List<Countries> country = new List<Countries>(); 
    public static List<Colors> color = new List<Colors>(); 

    public void foo() 
    { 
     color.Add(new Colors { Name= "Red", Hex = "FF0000"}); 
     color.Add(new Colors { Name= "Blue", Hex = "0000FF" }); 
     color.Add(new Colors { Name= "White", Hex = "FFFFFF" }); 
     color.Add(new Colors { Name= "Yellow", Hex = "FFFF00" }); 

     Countries newCountry = new Countries(); 
     newCountry.Name = "USA"; 
     newCountry.FlagColors.Add("Red"); 
     newCountry.FlagColors.Add("White"); 
     newCountry.FlagColors.Add("Blue"); 
     country.Add(newCountry); 

     Countries newCountry2 = new Countries(); 
     newCountry2.Name = "Sweden"; 
     newCountry2.FlagColors.Add("Blue"); 
     newCountry2.FlagColors.Add("Yellow"); 
     country.Add(newCountry2); 

     string selectedCountry = "USA"; 

     // Linq query here 
    } 
} 

감사

답변

2

당신과 같이이 작업을 수행 할 수 있습니다 당신은 LINQ 쿼리는 매우 간단 볼 수 있듯이

Country selectedCountry = country.SingleOrDefault(x => x.Name == selectedCountry); 
if (selectedCountry != null) { 
    Console.WriteLine(selectedCountry.Name); 
    foreach (string flagColor in selectedCountry.FlagColors) { 
     Colors color = color.SingleOrDefault(x => x.Name == flagColor); 
     if (color != null) { 
      Console.WriteLine(color.Name + " " + color.Hex); 
     } 
    } 
} 

, 당신은 기본적으로 일치하는 첫 번째 요소를 반환하려면 조건 술어 (이 경우 NameselectedCountry 또는 과 같습니다.)

+0

감사합니다. 코드가 작동하며 원하는대로 작동합니다. 그래, 충분히 간단 해 보인다. 구문을 배워야한다. 이 과정에서 도움이됩니다. 건배! – Caliber

1

아마도이 :

var q = from c1 in country 
     from c2 in c1.FlagColors 
     from c3 in color 
     where c3.Name == c2 && c1.Name == selectedCountry 
     select c3.Hex; 

또는 대안 :

var q = from c1 in country 
     from c2 in c1.FlagColors 
     join c3 in color on c2 equals c3.Name 
     where c1.Name == selectedCountry 
     select c3.Hex; 
관련 문제