2011-05-06 74 views
0

一個複雜的數據I有一個複雜的數據以這種方式LINQ查詢用於與分組

<Complex Data> 
     <Data Level 1>..........</Data> (only single row) 
     <Data>...................(n rows) 
      <Data 2a>............</Data> (only single row) 
      <Data 2b>............</Data> (n row) 
      <Id></Id>.....................(unique key) 
     </Data2> 
</Complex Data> 

我有這種複雜的數據LIST<COMPLEX DATA>。我需要組使用元素這個複雜的數據從<Data 2a.......eg: Place> </Data2a>

我嘗試實現這一點,但只有孩子的數據類型只有<Data 2a> insted的父數據類型<Data2>我得到。

我如何轉換這個孩子的數據類型爲母公司數據類型分組

我如何能在實現這個for each循環之後。

+1

is this XML?如果不是,你可以粘貼類定義嗎? – BrokenGlass 2011-05-06 13:39:17

回答

0

如果我正確理解您的文章,您正在尋找這樣的事情:

var grouping = source 
    .SelectMany(x => x.Items.Select(y => Tuple.Create(x, y)) 
    .SelectMany(t1 => t1.Item2.Items.Select(z => Tuple.Create(t1.Item1, z)) 
    .GroupBy(t2 => t2.Item2, t2 => t2.Item1); 

它有點難看,如果你想項目,但保持這種方式對源元素的引用...

Item1是您的完成數據,而Item2是您當前的投影。嵌套的foreach循環使其更具可讀性:

IEnumerable<Tuple<K, TSource>> SelectManyKeys(IEnumerable<TSource> source) 
{ 
    foreach (var x in source) 
    { 
     foreach (var k in x.Items.SelectMany(z => z.Items)) 
     { 
      yield return Tuple.Create(k, x); 
     } 
    } 
} 

var grouping = SelectManyKeys(source).GroupBy(t => t.Item1, t => t.Item2)); 
+0

hii尿布,謝謝你的回覆...但我使用.Net 3.5它不支持Tuple.Create()。這裏是我寫的查詢var GroupBy = objMedData.Data.Select(FB => FB.Data.GroupBy(FF => FF.PrimaryInsuranceID));我得到的結果作爲數據的對象,但我需要結果ComplexData – CEEYES 2011-05-09 04:51:13

+0

@CEEYES:除了元組,您還可以使用匿名類型:'new {ComplexData = x,Projection = y}'。 – Nappy 2011-05-09 07:31:51

+0

hii Nappy你能給我發一個類似於我這種類型的例子嗎?因爲我是LINQ新手.... – CEEYES 2011-05-09 08:39:18