2015-05-23 212 views
1

我從下面的數據表列中選取不同的值。將列表值分割成逗號分隔的字符串

var uniqueCC = dtNew.AsEnumerable().Select(s => new { cc = s.Field<string>("ID"), }).Distinct().ToList(); 
var uniqueCode = dtNew.AsEnumerable().Select(s => new { Code = s.Field<string>("EAI"), }).Distinct().ToList(); 

現在我需要單獨獲取逗號分隔的字符串中的值,我使用下面的代碼,它不單獨使用該值。

string strCC = String.Join(",", uniqueCC); 
string strEAI = String.Join(",", uniqueCode); 

請提供一些建議。

值列表

cc=1, cc=2, cc=3 

預期結果

1,2,3 
+0

上面的代碼會給你帶來什麼結果? –

回答

2

你可以使用LINQ Select()方法傳遞僅String.Join()

string strCC = String.Join(",", uniqueCC.Select(o => o.cc)); 

或者只是返回,而不是擺在首位匿名類型的字符串值:

var uniqueCC = dtNew.AsEnumerable().Select(s => s.Field<string>("ID")).Distinct(); 
string strCC = String.Join(",", uniqueCC); 
+0

好的,當我想出我的答案時,我甚至沒有發現那些是匿名類型。 –

1

您可以使用C#提供aggregate功能。

假設您有一個名爲listOfString的字符串列表,那麼您可以像這樣調用聚合函數。

string outString = listOfString.Aggregate((a, b) => a + "," + b); 

它會做的。

0

由於這是har07優秀的答案的延伸,如果這是你做了很多時間的事情,爲了節省編寫大量的代碼,你可以把它作爲一個靜態的擴展方法來實現,在那裏你通過da tatype,列名和您所需的分隔符 - 因此它可以處理不同的列數據類型和分隔符 - 在一個單獨的文件:

namespace Extensions 
    { 
     public static class LinqExtensions 
     { 
      public static String ReturnSeparatedString<T>(this DataTable datatable, string field, string separator) 
      { 
       var unique = 
        datatable.AsEnumerable() 
         .Select(s => new {cc = s.Field<string>(field),}).Distinct(); 

       return String.Join(separator, unique.Select(o => o.cc)); 
      } 
    } 
} 

然後從你的代碼通過創建到新Extensions.LinqExtensions類的引用調用它,並直接在dataTable上調用它,如下所示:

var commaSeparatedIds = dataTable.ReturnSeparatedString<string>("ID",","); 
    var commaSeparatedEAIs = dataTable.ReturnSeparatedString<string>("EAI",","); 
    var commaSeparatedInts = dataTable.ReturnSeparatedString<int>("MYINTS",","); 
    var dotSeparatedStrings = dataTable.ReturnSeparatedString<int>("OtherId", ".");