通用扩展方法参数限制
Generic extension method parameter restrictions
我正在为 IQueryable
创建一个扩展方法,以便自动映射器传入标准参数。尽管下面的代码有效,但在调用此方法时必须指定 TSource
类型似乎有点多余(如下面的调用代码所示)……即。当它已经知道 entityQuery
的类型是 Item
.
时,必须在方法调用中指定 <Item,
我不是泛型方面的专家,但想知道是否有一种方法可以在调用期间删除这种冗余,但仍然限定 TSource
需要符合接口 IAuditStampsViewModel
?
调用
public IQueryable<ItemViewModel> ConvertClassToViewModel(IQueryable<Item> entityQuery)
{
return entityQuery.ProjectToPassUserTimeOffset<Item, ItemViewModel>();
}
扩展方法定义
public static class AutoMapperExtensions
{
public static IQueryable<TDestination> ProjectToPassUserTimeOffset<TSource, TDestination>(this IQueryable<TSource> entityQuery)
where TSource : class, IAuditStampsViewModel, new()
{
return entityQuery.ProjectTo<TDestination>(
new { intMinutesOffset = TimeUtilities.UserTimeZoneUTCOffsetMinutes() }
);
}
}
你能限制在 IAuditStampsViewModel
上吗?然后你可以写:
public static class Extensions
{
public static IQueryable<TDestination> ProjectToPassUserTimeOffset<TDestination>(this IQueryable<IAuditStampsViewModel> entityQuery)
{
return entityQuery.ProjectTo<TDestination>(new {intMinutesOffset=TimeUtilities.UserTimeZoneUTCOffsetMinutes()});
}
}
来电者是:
public IQueryable<ItemViewModel> ConvertClassToViewModel(IQueryable<Item> entityQuery)
{
return entityQuery.ProjectToPassUserTimeOffset<ItemViewModel>();
}
我正在为 IQueryable
创建一个扩展方法,以便自动映射器传入标准参数。尽管下面的代码有效,但在调用此方法时必须指定 TSource
类型似乎有点多余(如下面的调用代码所示)……即。当它已经知道 entityQuery
的类型是 Item
.
<Item,
我不是泛型方面的专家,但想知道是否有一种方法可以在调用期间删除这种冗余,但仍然限定 TSource
需要符合接口 IAuditStampsViewModel
?
调用
public IQueryable<ItemViewModel> ConvertClassToViewModel(IQueryable<Item> entityQuery)
{
return entityQuery.ProjectToPassUserTimeOffset<Item, ItemViewModel>();
}
扩展方法定义
public static class AutoMapperExtensions
{
public static IQueryable<TDestination> ProjectToPassUserTimeOffset<TSource, TDestination>(this IQueryable<TSource> entityQuery)
where TSource : class, IAuditStampsViewModel, new()
{
return entityQuery.ProjectTo<TDestination>(
new { intMinutesOffset = TimeUtilities.UserTimeZoneUTCOffsetMinutes() }
);
}
}
你能限制在 IAuditStampsViewModel
上吗?然后你可以写:
public static class Extensions
{
public static IQueryable<TDestination> ProjectToPassUserTimeOffset<TDestination>(this IQueryable<IAuditStampsViewModel> entityQuery)
{
return entityQuery.ProjectTo<TDestination>(new {intMinutesOffset=TimeUtilities.UserTimeZoneUTCOffsetMinutes()});
}
}
来电者是:
public IQueryable<ItemViewModel> ConvertClassToViewModel(IQueryable<Item> entityQuery)
{
return entityQuery.ProjectToPassUserTimeOffset<ItemViewModel>();
}