2010-04-27 33 views
1

好了,所以我有一個在這裏DataTable的需要幫助一個複雜的LINQ查詢

 DataTable dt = new DataTable(); 
     dt.Columns.Add("word", typeof(string)); 
     dt.Columns.Add("pronunciation", typeof(string)); 

表已經填滿,我試圖讓LINQ查詢的模式,這樣我可以輸出到控制檯或任何類似的東西:

Pronunciation : akses9~R => (list of words) 

我想輸出最常見的發音和所有使用它的單詞。

+0

是什麼akses9〜[R!? – 2010-04-27 19:53:57

+0

這是行[「發音」]的內容 – Jipy 2010-04-27 20:34:24

+0

查詢並不複雜,但理解問題是。 – tster 2010-04-28 12:02:36

回答

2

像這樣的東西應該給你你想要的東西:

var results = dt.GroupBy(dr => dr.pronunciation); 

foreach(var result in results) 
{ 
    Console.Write("Pronunciation : {0} =>", result.Key); 
    foreach(var word in result) 
    { 
     Console.Write("{0} ", word); 
    } 
    Console.WriteLine(); 
} 

的的GroupBy給你一個IGrouping其主要屬性將包含語音和集合本身包含的所有單詞。

+1

非常感謝:) 最終查詢是: var results = dt.AsEnumerable()。GroupBy(dr => dr.Field (「Pronunciation」))。OrderByDescending(dr => dr.Count()); – Jipy 2010-04-28 13:10:27

0
var words = from row in table 
      where row.pronunciation == "akses9~R" 
      select row.word; 
foreach (string word in words) 
{ 
    Console.WriteLine(word); 
} 
1

聽起來像是你想要一組由:

var q = 
    from row in dt.Rows.Cast<DataRow>() 
    let val = new { Word = (string)row["word"], Pronunciation = (string)row["pronunciation"] } 
    group val by val.Pronunciation into g 
    select g; 

foreach (var group in q) 
{ 
    Console.WriteLine(
    "Pronunciation : {0} => ({1})", 
    group.Key, 
    String.Join(", ", group.Select(x => x.Word).ToArray())); 
} 
+0

它也可以工作,謝謝其他語法。 – Jipy 2010-04-28 13:20:42