簡體   English   中英

將數據表逗號分隔值放入字符串中

[英]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 OpDtA​​dPortalProcessReport = 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM