2013-08-20 2 views
-1

В C# Entity Framework 4 или 5выбрать новый производный класс от EF запроса

Entity Класс # 1

public class ClassOne 
{ 
    public string FirstName { get;set; } 
} 

public class ClassTwo : ClassOne 
{ 
    public string LastName get;set; } 
} 

для IQueryable:

return from e in Context.pClassOneList from r in SomeOtherList select new ClassTwo 
{ 

    // right here how do I get all the fields assigned without having to do it manually? ie: 
    FirstName = e.FirstName, 



    LastName = r.SomeOtherVar // works perfectly, but the whole of ClassOne is not assigned unless I do it manually. 
} 

Спасибо за вашу помощь.

+2

Добро пожаловать. (Каков ваш вопрос?) – Mansfield

+1

Создайте конструктор копирования. Вы можете сэкономить на шаблоне с чем-то вроде AutoMapper: http://automapper.org/ – millimoose

ответ

0

Одним словом, единственный способ автоматически привязать свойства базового класса в выражении - это динамически генерировать выражение выбора на лету. Это будет довольно много работы и замедлит ваш код. Я не думаю, что это путь. Однако, возможно, а не расширение базового класса вы можете просто инкапсулировать — вы можете вставлять результат в другом объекте, например:

public class ResultType 
{ 
    public ClassOne ClassOne { get; set; } 
    public string SomeOtherVar { get; set; } 
} 

return 
    from e in Context.pClassOneList 
    from r in SomeOtherList 
    select new ResultType 
    { 
     ClassOne = e, 
     SomeOtherVar = r.SomeOtherVar 
    }; 
+0

Я хотел бы иметь e как полный загруженный класс (ClassOne) и иметь возможность назначать свойства r (ClassTwo) на существующий ClassOne. Это лучше? haha – user2638032

+0

@ user2638032 Вы все равно не сможете сделать это автоматически. –

0

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

Вы можете создать конструктор класса ClassTwo, который принимает ClassOne и увлажняет унаследованные свойства ClassTwo или даже приближается к нему с помощью шаблона адаптера.

SomeOtherList, возможно, придется обрабатывать вручную, в зависимости от того, что он содержит. Но, пожалуйста, обратите внимание на свои принципы SOLID, когда вы начинаете креатив с вашими конструкторами.

Смежные вопросы