2014-02-09 28 views
0

我想知道是否有任何的方式來這片數據的整理與LINQ排序,這樣的數據:LINQ - 我怎樣才能在一個查詢

Firstname lastname age 
Xxxxxxxxx xxxxxxxxx xxxx 
Xxxxxxxxx xxxxxxxxx xxxx 
* group YYYY <---- contained at firstName column 
Xxxxxxxxx xxxxxxxxx xxxx 
Xxxxxxxxx xxxxxxxxx xxxx 
* group BBB 
Xxxxxxxxx xxxxxxxxx xxxx 
Xxxxxxxxx xxxxxxxxx xxxx 
* group LLL 

要:

Group  Firstname lastname age 
YYYY  Xxxxxxxxx xxxxxxxxx xxxx 
YYYY  xxxxxxxxx xxxxxxxxx xxxx 
BBB   Xxxxxxxxx xxxxxxxxx xxxx 
BBB   Xxxxxxxxx xxxxxxxxx xxxx 
LLL   Xxxxxxxxx xxxxxxxxx xxxx 
LLL   xxxxxxxxx xxxxxxxxx xxxx 

我已經做了它使用For語句,從列表的結尾開始獲取組名稱,然後將該值存儲在本地變量中,並繼續填充組列,然後使用LINQ來選擇所有其中FirstName列不包含*的列。

任何想法?

+0

顯示你當前的代碼。 – MarcinJuraszek

回答

2

您可以用骨料做到這一點:

public static void Main() 
{ 
    var data = new MyClass[] 
    { 
     new MyClass{FirstName="Tom"}, 
     new MyClass{FirstName="Dick"}, 
     new MyClass{FirstName="Harry"}, 
     new MyClass{FirstName="* group YYYY"}, 
     new MyClass{FirstName="Matthew"}, 
     new MyClass{FirstName="Mark"}, 
     new MyClass{FirstName="Luke"}, 
     new MyClass{FirstName="John"}, 
     new MyClass{FirstName="* group BBB"}, 
     new MyClass{FirstName="Moe"}, 
     new MyClass{FirstName="Larry"}, 
     new MyClass{FirstName="Curly"}, 
     new MyClass{FirstName="* group LLL"}, 
    }; 

    var groups = new Dictionary<string, List<MyClass>>(); 
    data.Aggregate(new List<MyClass>(), (a, b) => 
    { 
     if (b.FirstName.StartsWith("* group ")) 
     { 
      groups[b.FirstName.Substring(8)] = a; 
      return new List<MyClass>(); 
     } 
     a.Add(b); 
     return a; 
    }); 

    foreach (var group in groups.Keys) 
     foreach (var record in groups[group]) 
      Console.WriteLine("{0} {1}", group, record.FirstName); 
} 

public class MyClass 
{ 
    public string FirstName { get; set; } 
} 

輸出:

YYYY Tom 
YYYY Dick 
YYYY Harry 
BBB Matthew 
BBB Mark 
BBB Luke 
BBB John 
LLL Moe 
LLL Larry 
LLL Curly 
+0

哇!只是驚人而強大。謝謝你,先生。 – Urah