Как мне сопоставить сгенерированные результаты linq2sql с одним объектом? - PullRequest
0 голосов
/ 19 июля 2011

Я пытаюсь реорганизовать некоторые методы, чтобы не повторяться в отображениях объектов.Функции изложены в этом SO вопросе .

У меня есть универсальный метод, который вызывает одну из 4 хранимых процедур, которые возвращают результаты с одинаковыми полями, только с разными подмножествами данных.linq2sql генерирует разные объекты Result для каждой хранимой процедуры.

Существует ли способ общего сопоставления результатов с моим объектом-сервером?Требуется ли отражение?

private static List<DistroHeader> getHeaders<T>(Func<IEnumerable<T>> getHeaders)
{
    List<MyObj> myObj = new List<MyObj>();

    var result = from a in getMyObjData()
                 select a;

    foreach (var row in result)
        {
            myObj.Add(new MyObj()
            {
                Id = row.id,
                Description = row.descr,
                // ...etc
                // These fields are shared across the result types...
                // is there a way to make the compiler recognize that?
            });
        }
}

Ответы [ 3 ]

1 голос
/ 20 июля 2011

Линк будет выглядеть примерно так:

     var result = from a in getMyObjData()
                  select new { Id = a.id, Description = a.description };

Хороший ресурс для linq: 101 Образцы Linq .


РЕДАКТИРОВАТЬ:
Это зависит от ваших потребностей.Выше приведен очень простой пример создания универсального объекта.

Лучшим ответом на ваш вопрос было бы то, что вы видите ниже, потому что на самом деле создается объект нужного вам типа.

 MyObject newOject = from item in getMyObjData()
                     select new MyObject() 
                            {
                                 Id = item.Id, 
                                 Description = item.description 
                            };
0 голосов
/ 19 июля 2011

Полагаю, это нехорошая практика, но это то, что я сделал:

private static List<DistroHeader> getHeaders<T>(Func<IEnumerable<T>> getHeaders)
{
    List<MyObj> myObj = new List<MyObj>();

    var result = from a in getMyObjData()
                 select a;

    var pi = new List<PropertyInfo>(typeof(T).GetProperties());

    foreach (var row in result)
    {
        myObj.Add(new MyObj()
        {
            Id = (int)pi.Find(x => x.Name == "id").GetValue(row, null),
            Description = (string)pi.Find(x => x.Name == "descr").GetValue(row, null),
            // ...etc      
        });
    }
}
0 голосов
/ 19 июля 2011

Я бы посмотрел на использование AutoMapper .

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