2010-06-03 2 views
1

Я использую C# Linq теперь я превращающего DataTable к списку и я застрять ... дать мне правильное направление спасибо ..как конвертировать DataTable в список <String> в C#

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; 



    } 
+2

Пожалуйста, пост код, который вы написали до сих пор. Люди обычно не любят просто писать свой код для вас. –

+0

Я уверен, что я помещаю код .. –

+0

Список - это список одной строки. Но из вашего кода выше вы пытаетесь сохранить ряд значений. Какое поле из Linq вы хотите сохранить в списке. – zapping

ответ

4

Кажется, что у вас уже есть строго типизированный список. Зачем конвертировать это в слабо типизированный 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(); 

Если вы хотите, чтобы иметь возможность использовать этот список за рамки методы, определить тип, который будет содержать различные свойства и в вашем отборном заявлении использовать этот тип вместо анонимного типа, как:

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(); 
+0

это хорошо, но мой вопрос: хочу конвертировать Список coa = data; Как я могу это сделать. –

+0

Список list = data.ToList(); это не работает. i означает, что я получаю ошибку –

2

Вам не нужна таблица данных в соответствии с кодом, проявленный:

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(); 
2

Если вы действительно хотите конвертировать DataTable в список 1D, вы можете сделать это, как этот

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

Как вы используете Выбор нового в вас Linq запрос Это будет найти объект. Что вы можете сделать, это

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()); 
Смежные вопросы