LLBLGEN: загрузка коллекции EntityCollection или списка из таблицы данных - PullRequest
0 голосов
/ 31 мая 2011

Как мне загрузить EntityCollection или List (Of Entity) из DataTable, используя LLBLGen?

1 Ответ

2 голосов
/ 06 июня 2011

Таблица данных хранит свои значения в строках и столбцах, тогда как класс LLBLGen Collection содержит коллекцию объектов Entity, представляющих таблицу в вашем постоянном хранилище. Вы можете получить DataTable полей, которые вы определяете с помощью ResultsetFields через TypedListDAO. Однако переход от DataTable к EntityCollection невозможен, если только ваши объекты Entity не хранятся в вашей DataTable.

Скорее всего, у вас есть несколько ключей в вашей DataTable. Если это так, вам нужно будет перебирать строки в DataTable, извлекать ключи и создавать из них новые объекты Entity. Затем вы можете добавить эти объекты Entity в вашу коллекцию EntityCollection.

// Define the fields that we want to get
ResultsetFields fields = new ResultsetFields(2);
fields.DefineField(EmployeeFields.EmployeeId, 0);
fields.DefineField(EmployeeFields.Name, 1);

// Fetch the data from the db and stuff into the datatable
DataTable dt = new DataTable();
TypedListDAO dao = new TypedListDAO();
dao.GetMultiAsDataTable(fields, dt, 0, null, null, null, false, null, null, 0, 0);

// We now have a datatable with "EmployeeId | Name"
// Create a new (empty) collection class to hold all of the EmployeeEntity objects we'll create
EmployeeCollection employees = new EmployeeCollection();
EmployeeEntity employee;

foreach(DataRow row in dt.Rows)
{
    // Make sure the employeeId we are getting out of the DataTable row is at least a valid long
    long employeeId;
    if(long.TryParse(row["EmployeeId"].ToString(), out employeeId)) 
    {
        // ok-looking long value, create the Employee entity object
        employee = new EmployeeEntity(employeeId);

        // might want to check if this is .IsNew to check if it is a valid object
    }
    else
    {
        throw new Exception("Not a valid EmployeeId!");
    }

    // Add the object to the collection
    employees.Add(employee);
}

// now you have a collection of employee objects...
employees.DoStuff();
...