2012-10-04 2 views
0

아래 두 가지 수준의 계층 구조를 나타내는 모델을 가지고 있는데 그 중 하나는 SubMenuItems 하위 컬렉션에서 하나의 ID를 선택한 다음 부모 레코드의 결과를 연결하는 것입니다. TextToDisplay 속성 .LINQ 계층 모델의 결과 선택 및 연결

질문이 있는데 하나의 부모 항목과 단일 하위 항목을 반환하는 방법은 TextToDisplay 속성에 액세스하는 것입니다.

I 조회 할 개체는 ObserableCollection

public ObservableCollection<MenuModel> MenuItems { get; set; } 

모델

입니다
public class MenuModel 
{ 
    public int ID { get; set; } 
    public string TextToDisplay { get; set; } 
    public string ImageSource { get; set; } 
    public ObservableCollection<MenuModel> SubMenuItems { get; set; } 
} 

답변

1

사용 Single()리스트의 요소가 있는지 확인하는 하나 개의 항목 및 Any()를 얻을 수 검색어와 일치합니다.

int theIdYouWant = 30; //for example 
var parentItem = MenuItems.Single(i => i.SubMenuItems.Any(si => si.Id == theIdYouWant)); 
var text = parentItem.TextToDisplay + 
    parentItem.SubMenuItems.Single(i => i.Id == theIdYouWant).TextToDisplay; 

부모 항목에 ID가 30 인 하위 항목이 없거나 둘 이상의 상위 항목이 반환되는 경우 예외가 발생합니다. 따라서 SingleOrDefault()을 대신 사용하고 null 또는 Where을 확인한 다음 원하는 항목.

+0

'Single()'을 사용하면주의해야합니다. 객체가 발견되지 않는 예외가 있기 때문입니다. 대신'SingleOrDefault()'를 사용하는 것이 좋습니다. –

+0

@PatrikW 예, 실제로 방금 설명하는 문장을 추가했습니다. –

+0

(i => query)의 쿼리는 무엇을 나타 냅니까? –