Я использую .Select(i=> new T{...})
после каждого удара по дб вручную, чтобы преобразовать мои объекты в объект DTO. Вот некоторые примеры сущностей и DTOS
Пользовательский объект;
public partial class User
{
public int Id { get; set; }
public string Username { get; set; }
public virtual UserEx UserEx { get; set; }
}
Пользователь DTO;
public class UserDTO
{
public int Id { get; set; }
public string Username { get; set; }
}
объект UserEx;
public class UserEx
{
public int UserId { get; set; }
public string MyProperty1 { get; set; }
public virtual User User { get; set; }
}
UserEx DTO;
public class UserExDTO
{
public int MyProperty1 { get; set; }
public UserDTO UserModel { get; set; }
}
Мои методы выражения преобразования;
public static class ConversionExpression
{
public static Expression<Func<UserEx, UserExDTO>> GetUserExDTOConversionExpression()
{
return userEx => new UserExDTO
{
MyProperty1 = userEx.MyProperty1,
UserModel = new UserDTO
{
Id = userEx.User.Id,
Username = userEx.User.Username
}
};
}
public static Expression<Func<User, UserDTO>> GetUserDTOConversionExpression()
{
return user => new UserDTO
{
Id = user.Id,
Username = user.Username
};
}
}
И мое текущее использование для UserDTO;
myContext.Users
.Select(ConversionExpression.GetUserDTOConversionExpression())
.ToList();
для UserExDTO;
myContext.UserExes
.Select(ConversionExpression.GetUserExDTOConversionExpression())
.ToList();
Прошу прощения за долгое вступление, вот мой вопрос
Мне нужно сгруппировать
new UserDTO
{
Id = userEx.User.Id,
Username = userEx.User.Username
}
из-за одной проблемы. Поэтому я хочу что-то вроде этого;
public static Expression<Func<UserEx, UserExDTO>> GetUserExDTOConversionExpression()
{
return userEx => new UserExDTO
{
MyProperty1 = userEx.MyProperty1,
//this line does not behave like the other one
UserModel = userEx.User.GetUserDTOConversionExpression()
};
}
Есть ли способ сделать это, или я должен записать каждое выражение, индивидуальное и не связанное с аналогичными потребностями?