Вы не можете сделать это с вашим текущим кодом, так как new { }
создает анонимный тип , который не имеет отношения к T (он не является ни дочерним, ни тип T).Вместо этого вы можете реализовать Id
, Name
, EntityStatus
, DateCreated
и DateModified
в качестве свойств вашего EntityValueType
класса и изменить:
private List<T> BuildTypes<T>(XDocument xDocument) where T: EntityValueType
На:
private List<T> BuildTypes<T>(XDocument xDocument) where T: EntityValueType, new()
Указывает, что любой аргумент типа, передаваемый нашему методу, должен иметь конструктор без параметров, который позволяет использовать для фактического построения объекта типа T путем изменения:
select new { ... } as T
To:
select new T { ... }
Конечный результат:
public class EntityValueType
{
public Guid Id { get; set; }
public string Name { get; set; }
// Change this to the correct type, I was unable to determine the type from your code.
public string EntityStatus { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
}
public class AuditActionType: EntityValueType
{
}
private List<T> BuildTypes<T>(XDocument xDocument) where T: EntityValueType, new()
{
return (from ty in xDocument.Descendants("RECORD")
select new T
{
Id = GenerateGuid(),
Name = ty.Element("Name").Value,
EntityStatus = _activeEntityStatus,
DateCreated = DateTime.Now,
DateModified = DateTime.Now
}).ToList();
}