I've получил XML, как это:Группа необязательными столбцов с помощью Linq
<LiftFactors>
<Products>
<Product>
<ProductId>Limella</ProductId>
<Tactics>
<Tactic>
<Typ>PriceRed</Typ>
<TPRFrom>0</TPRFrom>
<TprThru>10</TprThru>
<Lift>14</Lift>
<VF>2012-01-09</VF>
<VT>2012-01-11</VT>
</Tactic>
<Tactic>
<Typ>PriceRed</Typ>
<TPRFrom>10 </TPRFrom>
<TprThru>20</TprThru>
<Lift>30</Lift>
<VF>2012-01-07</VF>
<VT>2012-20-08</VT>
</Tactic>
<Tactic>
<Typ>Display</Typ>
<Lift>14</Lift>
<VF>2012-01-04</VF>
<VT>2012-01-06</VT>
</Tactic>
</Tactics>
</Product>
<Product>
<ProductId>Empower Cola</ProductId>
<Tactics>
<Tactic>
<Typ>Display</Typ>
<Lift>20</Lift>
<VF>2012-01-01</VF>
<VT>2012-01-08</VT>
</Tactic>
</Tactics>
</Product>
</Products>
</LiftFactors>
со следующим утверждением LinQ I'm Получение Tactic данных, сгруппированных по ProductID и упорядоченные по дате ValidFrom:
var xml = XElement.Parse(theXML);
var d = (from e in xml.Descendants(@"Product")
group e by e.Element("ProductId").Value into Items
select Items).ToDictionary
(x => x.Key, x => ((XElement)x.First()).Descendants("Tactic").ToList().OrderByDescending (y=> ((DateTime)y.Element("VF"))));
Выход:
Limella -> Tactic PriceRed 1
-> Tactic PriceRed 2
-> Tactic Display
Empower Cola -> Tactic Display
Теперь предположим узлы 'продукта' являются необязательными, и я могу дополнительно T Actic узлы вне узлов продукта:
<LiftFactors>
<Products>
<Product>
<ProductId>Limella</ProductId>
<Tactics>
<Tactic>
<Typ>PriceRed</Typ>
<TPRFrom>0</TPRFrom>
<TprThru>10</TprThru>
<Lift>14</Lift>
<VF>2012-01-09</VF>
<VT>2012-01-11</VT>
</Tactic>
</Tactics>
</Product>
</Products>
<Tactics>
<Tactic>
<Typ>PriceRed</Typ>
<TPRFrom>0</TPRFrom>
<TprThru>10</TprThru>
<Lift>14</Lift>
<VF>2012-01-09</VF>
<VT>2012-01-11</VT>
</Tactic>
</Tactics>
</LiftFactors>
Теперь то, что я хочу, это выход:
Limella -> Tactic 1
-> ...
<Null> -> Tactic 2
-> ....
Так что тактика должна также появиться в группе, не имеющей ключа, назначенного. Возможно ли это только с одним запросом linq?
Спасибо! Очень хорошо работает. –