我从下面的数据表列中选择不同的值。
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);
答案 1 :(得分:1)
您可以使用c#中提供的aggregate
函数。
假设您有一个名为listOfString
的字符串列表,那么您可以像这样调用聚合函数。
string outString = listOfString.Aggregate((a, b) => a + "," + b);
它会起作用。
答案 2 :(得分:0)
作为har07优秀答案的扩展,如果这是你做很多时间的事情,为了节省编写代码的负载,你可以将它作为静态扩展方法实现,在这里传递数据类型,列名和你的必需的分隔符 - 因此它可以处理不同的列数据类型和分隔符 - 在单独的文件中:
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", ".");