【发布时间】:2021-12-24 21:22:09
【问题描述】:
我想要一个将实体项转换为 DTO 对象的表达式,并使用附加参数来选择应将哪些数据复制到 DTO 中。在我添加参数之前,这非常有效:
private static readonly Expression<Func<User, UserDataGroupType, UserData>> s_entityToDataExpression = (User entity, UserDataGroupType dataGroups) => new UserData
{
Id = entity.Id,
State = entity.State,
Role = entity.Role.ToData(),
BaseData = dataGroups.HasFlag(UserDataGroupType.Base) ? entity.ToDataBase() : null,
BirthData = dataGroups.HasFlag(UserDataGroupType.Birth) ? entity.ToDataBirth() : null,
AddressData = dataGroups.HasFlag(UserDataGroupType.Address) ? entity.ToDataAddress() : null,
ExtendedData = dataGroups.HasFlag(UserDataGroupType.Extended) ? entity.ToDataExtended() : null,
};
private static readonly Func<User, UserDataGroupType, UserData> s_entityToDataDelegate = s_entityToDataExpression.Compile();
public static UserData ToData(this User entity, UserDataGroupType dataGroups) => s_entityToDataDelegate(entity, dataGroups);
public static IQueryable<UserData> ToData(this IQueryable<User> queryable, UserDataGroupType dataGroups) => queryable.Select(s_entityToDataExpression);
它抱怨最后一行的参数:
无法从 'System.Linq.Expressions.Expression
>' 到 'System.Linq.Expressions.Expression >'
int 是从哪里来的? UserDataGroupType 是字节类型标志枚举。
更新
在@guru-stron 建议的修改之后,工作代码如下所示:
private static Expression<Func<User, UserData>> GetToDataExpression(UserDataGroupType dataGroups) => (entity) => new UserData {...}
public static IQueryable<UserData> ToData(this IQueryable<User> queryable, UserDataGroupType dataGroups) => queryable.Select(GetToDataExpression(dataGroups));
【问题讨论】:
标签: c# entity-framework linq asp.net-core .net-core