2016-03-28 11 views
0

私は以下のデータを持つテーブルを持っています。LINQでgroup byを使用して作成した子データをマージする方法はありますか?

enter image description here

私は文書IDによってグループにデータをたいた後、カンマ区切りを使用して一緒にDocPropIdentifyNameとメタ値をマージします。

enter image description here

を、私は以下のようにしますforeachを使用して、それをやっている:出力は次のようになります

var test = (from r in lstDocSearch 
        group r by r.DocumentID 
         into g 

         select new 
         { 
          DocumentID = g.Key, 
          MetaValues = g.ToList() 

         }).ToList(); 

     List<DocSearch> list = new List<DocSearch>(); 

     foreach (var item in test) 
     { 

      foreach (var item2 in item.MetaValues) 
      { 
       var check = list.Exists(x => x.DocumentID == item2.DocumentID); 
       if (check) 
       { 
        var find = list.FirstOrDefault(x => x.DocumentID == item2.DocumentID); 

        find.MetaValue = find.MetaValue + ", " + item2.MetaValue; 
        find.DocPropIdentifyName = find.DocPropIdentifyName + ", " + item2.DocPropIdentifyName; 
       } 
       else 
       { 
        DocSearch objDocSearch = new DocSearch(); 

        objDocSearch.DocumentID = item2.DocumentID; 
        objDocSearch.DocPropIdentifyID = item2.DocPropIdentifyID; 
        objDocSearch.DocPropIdentifyName = item2.DocPropIdentifyName; 
        objDocSearch.MetaValue = item2.MetaValue; 

        list.Add(objDocSearch); 
       } 
      } 
     } 

をしかし、私は、LINQのではなく、コレクションをループでこれをやりたいです。出来ますか?

答えて

2

これはどういう意味ですか? :

var test = (from r in lstDocSearch 
      group r by r.DocumentID 
      into g 
      select new 
      { 
       DocumentID = g.Key, 
       MetaValues = String.Join(",", g.Select(o => o.MetaValue)), 
       DocPropIdentifyNames = String.Join(",", g.Select(o => o.DocPropIdentifyName)), 
      }).ToList(); 
+1

スポットをオンにすると、私が許可するとすぐに回答が受け付けられます。 –

関連する問題