문제

나는 LINQ에서 무언가를 사로 잡는 데 어려움을 겪고 있습니다. 누군가가 나에게 몇 가지 팁을 줄 수 있습니다.

새로운 XML로 변환 해야하는 XML이 있습니다. 이것의 문제는 그것을 올바르게하기 위해 몇 가지 변환의 반복이 필요하다는 것입니다.

소스는 다음과 같이 보일 것입니다.

    <Meals>
      <ketchup/>
      <steak/>
      <mustard/>
      <thigh/>
      <fillet/>
      <penne/>
      <drumstick/>
      <steak/>
      <ketchup/>
      <fillet/>
      <fillet/>
      <macaroni/>
      <drumstick/>
      <thigh/>
      <ketchup/>
      <thigh/>
      <fillet/>
    </Meals>

내가 이것을 끝내고 싶은 것은 다음과 같습니다.

    <Meals>
      <Meal>
        <ketchup/>
        <steak/>
        <mustard/>
        <thigh/>
      </Meal>
      <Meal>
        <fillet/>
        <penne/>
        <drumstick/>
      </Meal >
      <Meal>
        <steak/>
        <ketchup/>
      </Meal>
      <Meal>
        <fillet/>
      </Meal>
      <Meal>
        <fillet/>
        <macaroni/>
        <drumstick/>
      </Meal>
      <Meal>
        <thigh/>
        <ketchup/>
      </Meal>
      <Meal>
        <thigh/>
        <fillet/>
      </Meal>
    </Meals>

여기서 논리는 다음과 같습니다.

  • <steak> 그리고 <fillet> 쇠고기 고기 - 아직 다른 식사의 일부가 아닌 한 식사의 쇠고기 고기 부분이 아닌 전후에 일어나는 일. 쇠고기 고기 후에 쇠고기 고기가 발생하면 새로운 쇠고기 고기의 요소에서 새로운 식사가 만들어집니다.
  • <thigh> 그리고 <drumstick> 닭고기는 닭고기가 아닌 닭고기가 아닌 전후에 일어나는 일은 아직 다른 식사의 일부가 아닌 한 식사의 일부입니다. 닭고기 후에 닭고기가 발생하면 새 닭고기의 요소에서 새로운 식사가 만들어집니다.
  • <macaroni> 그리고 <penne> 파스타는 파스타가 아닌 전후에 일어나는 일이 아직 다른 식사의 일부가 아닌 한 식사의 일부입니다. 파스타가 파스타 이후에 발생하면 새로운 파스타의 요소에서 새로운 식사가 만들어집니다.
  • <ketchup> 그리고 <mustard> 조미료입니다 - 그들은 모든 식사의 일부가 될 수 있습니다.

나는 자신과 요소가 efforeself로 시작했고, 요소를 시작했지만, 위의 성능을 수행하는 방법에 대한 이해로 벽에 달려 있습니다. vb.net 및 linq를 사용하고 있지만 C#을 읽을 수 있습니다.

생각이나 포인터가 있습니까?

도움이 되었습니까?

해결책

다른 포럼에서 좋은 답변을 얻었고 여기에 마지막입니다.

    Dim meals As XElement = <Meals>
                                <ketchup/>
                                <steak/>
                                <mustard/>
                                <thigh/>
                                <fillet/>
                                <macaroni/>
                                <drumstick/>
                                <thigh/>
                                <ketchup/>
                                <thigh/>
                                <fillet/>
                            </Meals>
    Dim newMeals As XElement = <Meals/>
    Dim meal As XElement = <Meal/>
    Dim hasBeef As Boolean
    Dim hasChicken As Boolean
    For Each m In meals.Descendants()
        Select Case m.Name
            Case Is = "steak", "fillet"
                If hasBeef Then
                    newMeals.Add(meal) 
                    meal = <Meal/> 
                    hasChicken = False
                Else
                    hasBeef = True
                End If
                meal.Add(m)
            Case Is = "drumstick", "thigh"
                If hasChicken Then
                    newMeals.Add(meal)
                    meal = <Meal/>
                    hasBeef = False
                Else
                    hasChicken = True
                End If
                meal.Add(m)
            Case Else
                meal.Add(m)
        End Select
    Next
    newMeals.Add(meal)

다른 팁

당신은 찾을 수 있습니다 linqpad 유용한. 나는 당신의 문제를 해결할 것입니다. 그러나 나는 당신이 지정한 조합 논리에 대해서는 명확하지 않습니다. 그것이 내가 이해할 때 예와 일치하지 않기 때문에 (예 : 모든 식사에서 겨자가 없는가?)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top