簡體   English   中英

如何將數據表轉換為列表 <String> 在C#中

[英]how convert DataTable to List<String> in C#

我正在使用C#Linq,現在我正在將DataTable轉換為List,並且遇到問題了……給我正確的方向謝謝..

    private void treeview1_Expanded(object sender, RoutedEventArgs e)
    {

        coa = new List<string>();
        //coa = (List<string>)Application.Current.Properties["CoAFull"];
        HMDAC.Hmclientdb db = new HMDAC.Hmclientdb(HMBL.Helper.GetDBPath());

        var data = (from a in db.CoA
                    where a.ParentId == 0 && a.Asset == true
                    select new { a.Asset, a.Category, a.CoAName, a.Hide, a.Recurring, a.TaxApplicable });

        DataTable dtTable = new DataTable();
        dtTable.Columns.Add("Asset", typeof(bool));
        dtTable.Columns.Add("Category", typeof(string));
        dtTable.Columns.Add("CoAName", typeof(string));
        dtTable.Columns.Add("Hide", typeof(bool));
        dtTable.Columns.Add("Recurring", typeof(bool));
        dtTable.Columns.Add("TaxApplicable", typeof(bool));

        if (data.Count() > 0)
        {
            foreach (var item in data)
            {
                DataRow dr = dtTable.NewRow();
                dr["Asset"] = item.Asset;
                dr["Category"] = item.Category;
                dr["CoAName"] = item.CoAName;
                dr["Hide"] = item.Hide;
                dr["Recurring"] = item.Recurring;
                dr["TaxApplicable"] = item.TaxApplicable;
                dtTable.Rows.Add(dr);

            }
        }


        coa = dtTable;



    }

看來您已經有一個強類型列表。 為什么將其轉換為弱類型的DataTable然后再返回列表?

var data = 
    from a in db.CoA
    where a.ParentId == 0 && a.Asset == true
    select new 
    { 
        a.Asset, 
        a.Category, 
        a.CoAName, 
        a.Hide, 
        a.Recurring, 
        a.TaxApplicable 
    };
var list = data.ToList();

如果您希望能夠在方法范圍之外使用此列表,請定義一個將包含不同屬性的類型,並在您的select語句中使用此類型,而不使用匿名類型,例如:

var data = 
    from a in db.CoA
    where a.ParentId == 0 && a.Asset == true
    select new MyType
    { 
        Asset = a.Asset, 
        Category = a.Category, 
        CoAName = a.CoAName, 
        Hide = a.Hide, 
        Recurring = a.Recurring, 
        TaxApplicable = a.TaxApplicable 
    };
List<MyType> list = data.ToList();

根據顯示的代碼,您不需要數據表:

var data = (from a in db.CoA 
    where a.ParentId == 0 && a.Asset == true 
    select new { a.Asset.ToString() + a.Category.ToString() 
        + a.CoAName.ToString()... }).ToList(); 

如果您確實要將數據表轉換為一維列表,則可以這樣做

foreach (DataRow row in dtTable.Rows) 
{
    foreach (DataColumn col in dtTable.Columns)
    {
        coa.Add(row[col]);
    }
}

當您在linq查詢中使用Select new時,它將找到對象。 你能做的是

var data = (from a in db.CoA
                    where a.ParentId == 0 && a.Asset == true
                    select new { a.Asset, a.Category, a.CoAName, a.Hide, a.Recurring, a.TaxApplicable });

這是您的查詢,您可以在查詢中選擇多個列。 因此,您無法將數據轉換為單個字符串列表。 您可以做的是將所有列連接到一個字符串中,然后將它們添加到字符串列表中。

為此,請修改您的查詢,例如“ CK”

var data = (from a in db.CoA 
    where a.ParentId == 0 && a.Asset == true 
    select new { a.Asset.ToString() + a.Category.ToString() 
        + a.CoAName.ToString()... }).ToList(); 

然后做

List<string> name  = new List<string>(data.ToList());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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