2014-12-20 3 views
0

LINQ를 사용하여 목록에서 데이터 개체 그룹을 찾고 싶습니다. 나는 현재 컬렉션에서 필요한 것을 찾기 위해 반복하고있다.목록에서 LINQ 사용

저는 온라인에서 많은 예제를 검색하고 읽었지만 필자가 필요로하는 것은 충분히 이해할 수 없습니다.

검색하려는 데이터 개체를 내 코드에서 "속성"이라고합니다. 속성에는 "속성"의 일반 목록이 있습니다. 속성에는 이름과 값이라는 두 개의 항목이있는 문자열의 일반 목록이 있습니다. 목록

데이터 :

인구와 재산의
Property_Data 
{ 
    Attribute {name="Color" value=""} 
    Attribute {name="Size" value=""} 
    Attribute {name="Width" value=""} 
    Attribute {name="Display" value=""} 
} 

예는 다음

My_Property 
    Color = black 
    Size = 12 
    Width = 2 
    Display = True 

내가 각 속성 객체를 반복 내가 사용하는 코드는 내가의 컬렉션의 각 항목을 반복되는 속성 "Display"라는 이름과 "True"값을 가진 속성을 검색하는 속성. 내가 배우고 싶은 무엇

foreach (IPropertyData prop_data in Properties) 
    { 
    if (prop_data.Attributes.Find(a => a.Name == "Display").Value == "True") 
    { 
     // do something here 
    }          
    } 

는 속성 데이터의 수집은 그래서 각 속성과 속성의 다음 속성을 반복 할 필요는 없습니다 LINQ를 사용하는 것은 개체를 검색하는 방법입니다. 여기

는 나의 시도이다 : 당신이 당신의 질문 업데이트 후 전체 모음 다음

Properties.ForEach(item=> { 
     if(item.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True")) 
     { 
      // Do your work. 
     } 
}); 

을 고려하면

IEnumerable<IPropertyData> prop_datas = Properties 
     .Where(p => p.Attributes.Where(a => a.Name == "isDisplayable" && a.Value == "True"); 

답변

1
if(prop_data.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True")) 
{ 
    // Do your work 
} 

IEnumerable<IPropertyData> prop_datas = Properties 
     .Where(p => p.Attributes.Any(cc=>cc.Name == "Display" && cc.Value == "True")); 
+0

내가했던 것은 속성 컬렉션에서 검색하는 방법 이었지만 각 속성 데이터 개체는 검색하지 않았습니다. LINQ에서 시도한 내용을 포함하도록 질문을 업데이트했습니다. "Properties"객체에서 검색 중이며 각 속성에 대해 반복하지는 않습니다. –

+0

내가 작성한 두 가지 업데이트를 확인하십시오. – dotnetstep

+1

Jon Skeet은 LINQ의 작동 방식을 실제로 볼 수있는 edulinq라는 블로그 게시물을 많이 보유하고 있습니다. http://codeblog.jonskeet.uk/category/edulinq/. 이 모든 방법을 배우는 것이 제 2의 천성이되도록 가치가 있습니다. –

0
var query = 
    from prop_data in Properties 
    where prop_data.Attribute("IsDisplayable") == "True" 
    select prop_data; 
,

쿼리 변수에는 IsDisplable 특성이 "True"인 목록의 모든 항목이 포함되어야합니다. 찾은 각 요소를 살펴보고 싶다면 간단히 다음과 같이 할 수 있습니다.

foreach (var item in query) 
{ 
// item.Attribute("IsDisplayable") = False; 
}