Abdalla Ben Omran Ответов: 3

Как я могу преобразовать тип System.коллекции.универсальный.список ' к 'системе.данных.таблица данных'


Как я могу преобразовать тип System.коллекции.универсальный.список ' к 'системе.данных.таблица данных' ?

В методе GetOpenBranchSalesInvoice() он возвращает список, но проблема заключается в том, что есть 1 ссылка, которая является :

DataTable OpenBranchSalesInvoice =  SQL_DB.GetOpenBranchSalesInvoice();

затем
foreach (DataRow dr in OpenBranchSalesInvoice.Rows)


Итак, как я могу установить List<branchsales> В DataTable ?
Я буду благодарен за объяснение

Что я уже пробовал:

internal static List<BranchSales> GetOpenBranchSalesInvoice()
       {
           List<BranchSales> branchSalesList = new List<BranchSales>();
           using (SqlConnection connection = SQL_DB.getSQL_Connection())
           {
               connection.Open();
               SqlCommand command = new SqlCommand(some query here ");
               using (SqlDataReader reader = command.ExecuteReader())
               {
                   while (reader.Read())
                   {
                       BranchSales branch = new BranchSales();
                       branch.branchSaleID = (Guid)reader["branchSaleID"];
                       branch.orderNo = (string)reader["orderNo"];
                       branch.branchCode = (string)reader["branchCode"];
                       branch.BranchSalesOrderNo = (string)reader["BranchSalesOrderNo"];
                       branch.BranchSalesInvoiceNo = (string)reader["BranchSalesInvoicesNo"];
                       branchSalesList.Add(branch);
                   }
               }
           }
           return branchSalesList;
       }

3 Ответов

Рейтинг:
22

OriginalGriff

Вы можете посмотреть здесь: Преобразование списка в таблицу данных[^]


[no name]

это здорово, пол . спасибо

OriginalGriff

Всегда пожалуйста!

[no name]

oh ja только еще одна вещь я получил ее сегодня которая касается вашего метода расширения преобразовать список в таблицу данных и в этой части :
ДТ.колонны.Добавить(property.Name-собственность.PropertyType);
у меня есть нулевое исключение, поэтому я сделал следующее :

ДТ.колонны.Добавить(собственность.Имя, Допускающий Значение Null.GetUnderlyingType(
собственность.PropertyType) ?? собственность.PropertyType);
и теперь все работает нормально

OriginalGriff

:большой палец вверх:

Рейтинг:
12

Maciej Los

Ты можешь:
1. добавьте еще один метод

internal static DataTable GetOpenBranchSalesInvoiceDt()
{
    DataTable dt = new DataTable();
    using (SqlConnection connection = SQL_DB.getSQL_Connection())
        using(SqlCommand command = new SqlCommand("some query here ", connection);
        {
            connection.Open();               
            using (SqlDataReader reader = command.ExecuteReader())
                dt.Load(reader);
        }
    return dt;
}

2. преобразование списка в DataTable с помощью LoadDataRow[^] метод
DataTable obsi= new DataTable();
obsi.Columns.AddRange(new DataColumn[]
{
    new DataColumn("branchSaleID", typeof(Guid)),
    new DataColumn("orderNo", typeof(string)),
    ....
    new DataColumn("BranchSalesInvoicesNo", typeof(string))
});

obsi = SQL_DB.GetOpenBranchSalesInvoice()
    .Select(bs => dt.LoadDataRow(new object[]
        {
            bs.branchSaleID,
            bs.orderNo,
            ...
            bs.BranchSalesInvoicesNo
        }, false))
    .CopyToDataTable();


Рейтинг:
1

Shameel

Метод GetOpenBranchSalesInvoice() заполняет список из средства чтения данных. Вы можете просто непосредственно заполнить DataTable с помощью адаптера данных в этом методе и вернуть таблицу из этого метода.

Вот пример кода, Вы можете адаптировать его в соответствии с вашими потребностями.

DataTable dt = new DataTable()
using (SqlCommand cmd = new SqlCommand("SELECT * FROM Table", con))
{
    cmd.CommandType = CommandType.Text;
    using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
    {
        sda.Fill(dt);
    }
}
return dt;