[英]Putting datatable comma separated values in a string
我的數據表由一個名為“ID”的列組成。 沒有。 此列中的值各不相同。有時此數據表在該 ID 列中獲取 3 個 ID,有時是 2 個。現在,例如,我的數據表具有三個值,分別為 1、2、3。 我想要的是將這三個值放在一個字符串中並用逗號分隔它們,如下所示:-
string test= "1,2,3";
如果 Datatable 有 2 個值,則字符串應如下所示:-
string test= "1,2";
我確實嘗試過,但徒勞無功。 請幫忙。 謝謝。
編輯:-
DataTable dt=new DataTable;
dt = obj.GetIDs();
for (int i = 0; i < dt.Rows.Count; i++)
{
string test= "What should be here????";
}
編輯 2
foreach(DataRow dr in dt.Rows)
{
string str = str + "," + Convert.ToString(dr("ID"));
}
@Rajeev :: 嘗試過這個..它說 dr 是一個變量,但用作方法。 怎么了?
只是一個使用LINQ 的班輪。
String result = table.AsEnumerable()
.Select(row => row["ID"].ToString())
.Aggregate((s1, s2) => String.Concat(s1, "," + s2));
像這樣的東西:
DataTable dt = new DataTable();
string output;
for (int i = 0; i < dt.Rows.Count; i++)
{
output = output + dt.Rows[i]["ID"].ToString();
output += (i < dt.Rows.Count) ? "," : string.Empty;
}
使用 linq,這樣做:
var idlist = table.AsEnumerable().Select( r => r.Field<string>("ID")).ToArray();
string result = string.Join(",", idlist);
這個修復了你的最后一個例子
foreach(DataRow dr in dt.Rows)
{
string str = str + "," + Convert.ToString(dr["ID"]);
}
您的問題是您正在嘗試調用dr("ID")
,但 dr 不是您的語法所暗示的方法。 改用dr["ID"]
來獲取行的 ID 列。
但是,最后一種方法也會給出結果“,1,2,3”,因此您最好像這樣重寫它(或使用我的 LINQ 變體):
List<string> myIds = new List<string>();
foreach(DataRow dr in dt.Rows)
{
myIds.Add( Convert.ToString(dr["ID"]));
}
string result = string.Join(",", myIds);
如何使用 Linq 在 ASP.NET C# 中將數據表列轉換為逗號分隔字符串 (CSV)。
選項 1:
string commaSeparatedString = String.Join(",", ds.Tables[0].AsEnumerable().Select(x => x.Field<int>("Data Table Column ID").ToString()).ToArray());
選項 2:
var SelectedValues = ds.Tables[0].AsEnumerable().Select(s => s.Field<int>("Data Table Column ID")).ToArray();
string commaSeperatedValues = string.Join(",", SelectedValues);
注意:請using System.Linq;
導入包using System.Linq;
如果我理解正確,您有一個數據表,它有 n 行和 1 列(即 ID)。
如果 dt 是數據表,那么您可以循環遍歷行集合,如下所示:
For Each dr as DataRow in dt.Rows
str = str + "," + Convert.ToString(dr("ID"))
Next
這對你有用嗎?
我們也可以使用下面的代碼來實現這一點。
這是我的數據表
DataTable OpDtAdPortalProcessReport = new DataTable();
OpDtAdPortalProcessReport.Columns.Add("Process Name");
OpDtAdPortalProcessReport.Columns.Add("Processed On");
OpDtAdPortalProcessReport.Columns.Add("Status");
OpDtAdPortalProcessReport.Columns.Add("Comments");
OpDtAdPortalProcessReport.Rows.Add("7 Miles", "", "gray", "");
OpDtAdPortalProcessReport.Rows.Add("Active", DateTime.Now.ToString("dd-MMM-yyyy hh:mm:ss tt"), "green", "");
OpDtAdPortalProcessReport.Rows.Add("BMW", DateTime.Now.ToString("dd-MMM-yyyy hh:mm:ss tt"), "green", "");
OpDtAdPortalProcessReport.Rows.Add("Eicoff", DateTime.Now.ToString("dd-MMM-yyyy hh:mm:ss tt"), "green", "");
OpDtAdPortalProcessReport.Rows.Add("Volkswagen", "", "gray", "");
OpDtAdPortalProcessReport.Rows.Add("Universal", DateTime.Now.ToString("dd-MMM-yyyy hh:mm:ss tt"), "orange", "Bot/Script failed to be Executed because of some server issue.");
Processname = String.Join(",", OpDtAdPortalProcessReport.Rows.Cast<DataRow>().Where(x => x["Status"].ToString().Contains("green")).ToList<DataRow>().Select(c=> c["Process Name"].ToString()));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.