Linq to Entities To имена столбцов - PullRequest
2 голосов
/ 04 февраля 2011

Я относительно новичок в Linq для Entities, но у меня хороший прогресс.Один пункт, который я еще не смог выяснить, - это как извлечь имена столбцов из базы данных.Например, в приведенном ниже коде я хотел бы заменить константы именами полей из базы данных.

Мне не удалось получить ответы, которые я видел где-то еще на работу.

Любая помощь будет оценена.

Боб

DataTable dtNPRS = new DataTable();

const string kInitDate = "NPR_Init_Date";
const string kActive = "Active";
const string kStatusId = "NPR_Status_Id";

try
{
    DataRow drNPR;

    var nprs = (from n in db.FMCSA_NPR
                join u in db.FMCSA_USER  on n.CREATED_BY equals u.ID
                join t in db.LKUP_NPR_TYPE  on  n.NPR_TYPE_ID equals t.ID
                join s in  db.LKUP_AUDIT_STATUS on  n.NPR_STATUS_ID equals s.ID
                where n.ROLE_ID == pRoleId && n.OWNER_ID == pOwnerId
                      && n.NPR_STATUS_ID == pNPRStatusId && n.ACTIVE == pActive
                select n).ToList();

    if (nprs.Count() == 0)
       return null;

    //  / build the table structure we need
    dtNPRS.Columns.Add(kInitDate, typeof(DateTime));
    dtNPRS.Columns.Add(kActive,typeof(bool));
    dtNPRS.Columns.Add(kStatusId,typeof(Int32));

    foreach (var npr in nprs)
    {
       drNPR = dtNPRS.NewRow();
       drNPR[kInitDate] = npr.NPR_INIT_DATE;
       drNPR[kActive] = npr.ACTIVE;
       drNPR[kStatusId] = npr.NPR_STATUS_ID;
       dtNPRS.Rows.Add(drNPR);
    }

    return dtNPRS;
}

1 Ответ

2 голосов
/ 04 февраля 2011

Единственный способ динамически преобразовать сущность LINQ в DataTable - использовать Reflection для получения имен:

var props = typeof(FMCSA_NPR).GetProperties();
foreach (var prop in props)
{
    dtNPRS.Columns.Add(prop.Name, prop.PropertyType);
}

И аналогичный процесс для обновления строк:

foreach (var prop in props)
{
    dtNPR[prop.Name] = prop.GetValue(npr, null);
}

РЕДАКТИРОВАТЬ: Для обработки Nullable, выполните:

if (prop.PropertyType.Equals(typeof(Nullable<>)))
    var type = prop.PropertyType.GetGenericArguments()[0];

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...