2015-04-28 5 views
0

Я пишу два открытых класса (test1, test2) с двумя полями, e. г. 'Имя и фамилия'. Затем я хотел бы заполнить данные из базы данных на эти объекты. Моя первая попытка была:Общие типы и LINQ

public List<T> FillFromDB<T>() 
{ 
    IQueryable<T> query = 
     from tbl in _table 
     select new T {Name=tbl.name, Surname=tbl.surname} 
} 

Но Т не знаю поля. Что я мог сделать? Спасибо за вашу помощь.

+1

Сделайте 'test1' и' test2' imlpement интерфейс с этими свойствами и поместите предложение where в тип 'T'. – DavidG

+0

Есть ли у них базовый тип, который можно использовать вместо T? – cDima

ответ

5

Вы можете создать общий интерфейс (или класс), из которого Test1 и Test2 наследуют и задают необходимые ограничения для параметра типа FillFromDb.

public interface IHasName 
{ 
    public string Name { get; set; } 
    public string Surname { get; set; } 
} 
public class Test1 : IHasName 
{ 
    public string Name { get; set; } 
    public string Surname { get; set; } 
} 
public class Test2 : IHasName 
{ 
    public string Name { get; set; } 
    public string Surname { get; set; } 
} 
public List<T> FillFromDB<T>() 
    where T : new(), IHasName 
{ 
    IQueryable<T> query = 
     from tbl in _table 
     select new T {Name=tbl.name, Surname=tbl.surname} 
} 
+1

Я думаю, вам также придется добавить 'new()' к ограничениям. И технически вам не нужен «класс». – juharr

+0

Вы оба правы, спасибо, что указали это. –

+0

Может быть абстракцией IHasName? – ANKH

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