2014-03-06 40 views
0

我的數據庫返回值是象下面這樣:轉換列表<T>的一個屬性,以逗號分隔的項目

A  B C D 
TES  T 1 ARD  
TES  T 1 BLK  
TES  T 1 FLE  
TES  T 1 HEN  
TES  T 1 RIV  

我必須改變它像下面。

C#類以上結果作爲實體:

public class Entity 
{ 
    public string A{get; set;} 
    public string B{get; set;} 
    public string C{get; set;} 
    public string D{get; set;} 
} 

由於我使用類似MS SQL,甲骨文多個數據庫服務器,我的SQL我不喜歡寫查詢每個。例如:在MS SQL中,我必須填充併爲xml方法才能實現此目的。

回答

2

集團實體通過組合鍵{ A, B, C },然後在小組創建的所有項目串聯D值:

var result = from e in entities // where entities is in-memory list 
      group e by new { e.A, e.B, e.C } into g 
      select new Entity { 
       A = g.Key.A, 
       B = g.Key.B, 
       C = g.Key.C, 
       D = String.Join(",", g.Select(e => e.D)) 
      }; 

你可以通過調用db.Entities.AsEnumerable()移動查詢執行內存。當然,這需要將所有表格數據從數據庫下載到客戶端。但是,如果您要在服務器端進行分組,那麼您將有N + 1個查詢,其中N是組數。第一個查詢將返回不同的分組鍵值。其他查詢將按給定的組鍵值選擇所需的字段。

0

所以你想按前三列和逗號分組 - 第四列分開嗎?

我不知道這是否與你的LINQ提供程序,但它的工作原理LINQ到對象:

var query = db.Entity 
    .GroupBy(x => new { x.A, x.B, x.C }) 
    .Select(g => new Entity { 
     A = g.Key.A, B = g.Key.B, C = g.Key.C, 
     D = String.Join(",", g.Select(x => x.D)) 
    }); 
相關問題