I am doing this so I can return more basic classes from my api.
I can use the "static implicit operator" syntax to allow me to cast my custom classes from one type to another, but i can only do it one at time. How can I cast my custom types when working with lists? Here is my Entity Framework Core version of the class:
public class DivDbUser : DivDbBase, IDivDbTrackable
{
[Required]
[MaxLength(256)]
public string Name { get; set; }
[Required]
[MaxLength(256)]
public string Email { get; set; }
[Key]
public int Id { get; set; }
[Required]
public DateTimeOffset DateCreated { get; set; }
public int CreatedByUserId { get; set; }
[Required]
public DateTimeOffset LastDateModified { get; set; }
public int LastModifiedByUserId { get; set; }
[ForeignKey("CreatedByUserId")]
public DivDbUser CreatedByUser { get; set; }
[ForeignKey("LastModifiedByUserId")]
public DivDbUser LastModifiedByUser { get; set; }
public ICollection<DivDbResourceAssignment> ResourceAssignments { get; set; }
public ICollection<DivDbUserRole> UserRoles { get; set;
}
And here is my basic version of the class that I want to cast a list of for my api response:
public class DivUser : DivBase
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTimeOffset DateCreated { get; set; }
public int CreatedByUserId { get; set; }
public DateTimeOffset LastDateModified { get; set; }
public int LastModifiedByUserId { get; set; }
public static implicit operator DivUser(DivDbUser dbUser)
{
DivUser user = new DivUser() {
Id = dbUser.Id,
Name = dbUser.Name,
Email = dbUser.Email,
DateCreated = dbUser.DateCreated,
CreatedByUserId = dbUser.CreatedByUserId,
LastDateModified = dbUser.LastDateModified,
LastModifiedByUserId = dbUser.LastModifiedByUserId
};
return user;
}
}
I can cast one at a time, and loop with:
dbUsers = mContext.Users.ToList();
List<DivUser> users = new List<DivUser>();
foreach(DivDbUser dbUser2 in dbUsers)
{
DivUser user = dbUser2;
users.Add(user);
}
But I would like to do it this way:
dbUsers = mContext.Users.ToList();
List<DivUser> users = dbUsers.Cast<DivUser>().ToList();
But when I attempt to run it I get the following casting error:
System.InvalidCastException: 'Unable to cast object of type 'Db.Models.DivDbUser' to type 'ApiModels.DivUser'.'