2010-12-13 85 views
0

這有它的根到另一個問題,我問,是解決這個問題的一部分 -寫入一個linq查詢?

Convert this code to LINQ?

現在我想寫整個邏輯通過以下方式 -

var divisions = (
    from DataRow row in results.Rows 
    let section = row["SECTION"].ToString() 
    orderby section ascending 
    select section).Distinct(); 

string result = String.Empty; 

foreach (string div in divisions) 
{ 
    result = String.Concat(result, div, Environment.NewLine); 

    var query = 
     from DataRow row in results.Rows 
     let remarks = row["REMARKS"].ToString() 
     let exam = row["EXAM_NAME"].ToString() 
     let rollno = row["ROLL_NO"].ToString() 
     let section = row["SECTION"].ToString() 
     where (remarks == "Passes" || remarks == "Promoted") && 
      exam == "TOTAL" && section == div 
     orderby rollno 
     select rollno; 

    result = String.Concat(result,string.Join(" ", query.ToArray()), 
     Environment.NewLine);    
} 

基本上,原始的數據表有許多行,包含各種信息,包括Division。我想要創建一個單一的字符串,每個部門出現在一個新的行中,並且在該部分之後的分號以逗號分隔的方式顯示。下一行的下一個分區,等等。 (這裏部分和部分是可互操作的術語)。

是否有任何優雅的方式來寫這與一個linq查詢,而不是循環通過第一個查詢的結果?

編輯:

數據(不提的是,在過濾條件中的其它列)

Roll_no Section.. other cols 

001  A 
002  A 
001  B 
003  A 
004  B 
006  B 

這是輸出將是什麼樣子 - (卷沒有隻在一個部門是唯一的,但這不應該以任何方式影響所述邏輯)

A 
001 002 003 
B 
001 004 006 

這將是象 'A \ r \ N001 002 003 \ r \ NB \ r \ N001 004 006' 當字符串是原始格式。

請注意,上面的代碼有效。我只是在尋找更好的方法。

+0

您是否可以更新您的問題以顯示所需輸出的示例? – Steven 2010-12-13 11:17:18

+0

我已經更新了樣本數據和預期輸出 – 2010-12-13 11:47:55

回答

3

有兩個單獨的要求,你想實現,你不應該嘗試將它們合併成一個單一的東西。你想把結果分組,並且2。有特定的表達需求。

這裏是你如何能做到這一點:

var query = 
    from DataRow row in results.Rows 
    // here the query stuff you already had 
    select new { rollno, section, exam, remarks }; 

// 1. Grouping 
var groups = 
    from item in query 
    group item by item.section into g 
    select new 
    { 
     Section = g.Key, 
     Rollnos = g.Select(i => i.rollno).ToArray(), 
    }; 

// 2. Presentation 
foreach (var group in groups) 
{ 
    Console.WriteLine(group.Section); 
    Console.WriteLine(string.Join(" ", group.Rollno)); 
} 

它可以編寫一個單一的查詢也做演示的一部分,你,但此查詢將變得非常討厭和不可讀。

+0

+1的問題以獲得很好的答案,但我甚至會更進一步並提取更多功能,以使其更具可讀性。 – 2010-12-13 13:55:29

+0

有一些小的錯誤 - 像它應該是g.Select ...而不是group.Select ..仍然+1(還沒有正確地檢查查詢) – 2010-12-13 14:27:22

+0

一個小錯誤 - group by應該與section不滾動no 。 – 2010-12-13 14:35:36