EF 实体的通用扩展
Generic extension for EF entities
任务: 为 Entity Framework 个实体编写通用扩展
我不确定这是否可能,因为每个实体通常会有不同的属性,但我有一组实体共享一些共同的属性,我想知道这是否可能构建通用扩展,而不必总是为每个实体编写相同的代码。
我花了一点时间研究这个,但没有太多,这让我相信这是不可能的。
无论如何,与我更好的判断相反,我将在 Whosebug 上问一个愚蠢的问题。
这就是我的想法,但显然是一个不可编译的示例,但至少你会明白这个想法。
public static List<TEntity> Generic<TEntity>(this DbContext db, string name)
{
return db.TEntity.Where(s => s.Name == name);
}
戳对方向不胜感激
为了清楚起见,我从来没有在课堂上花过一个小时来编程,我是自学的,所以如果不可能做到这一点,答案能否解释请从技术上解释为什么这不可能Entity Framework。因为我自己找不到任何实质性的东西。
感谢@Bagus Tesa,我能够解决这个问题。
正如 Bagus tesa 所说,制作一个 interface
来引用 Entities
的共同属性,并用 Entities
引用 interface
并以此方式进行扩展.
我用的代码,
public static IQueryable<IFilterEntity> FilterEntity(this BaseViewModel vm,
IQueryable<IFilterEntity> list)
{
return list.Where(s => s.Name == vm.name &&
s.DateMonth == vm.Month &&
s.DateYear == vm.Year);
}
界面,
public interface IFilterEntity
{
string Name { get; set; }
int? DateYear { get; set; }
int? DateMonth { get; set; }
}
BaseViewModel,
public class BaseViewModel
{
string Name => RootVm.Name;
int? DateYear => RootVm.SelectedDate.Month;
int? DateMonth => RootVm.SelectedDate.Month;
}
感谢您的帮助。我希望这对其他人有帮助。
使用这个
public IEnumerable<TEntity> Filter(Expression<Func<TEntity, bool>> filter, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null)
{
db.Set<TEntity>().AsNoTracking().AsQueryable().Where(filter);}
任务: 为 Entity Framework 个实体编写通用扩展
我不确定这是否可能,因为每个实体通常会有不同的属性,但我有一组实体共享一些共同的属性,我想知道这是否可能构建通用扩展,而不必总是为每个实体编写相同的代码。
我花了一点时间研究这个,但没有太多,这让我相信这是不可能的。
无论如何,与我更好的判断相反,我将在 Whosebug 上问一个愚蠢的问题。
这就是我的想法,但显然是一个不可编译的示例,但至少你会明白这个想法。
public static List<TEntity> Generic<TEntity>(this DbContext db, string name)
{
return db.TEntity.Where(s => s.Name == name);
}
戳对方向不胜感激
为了清楚起见,我从来没有在课堂上花过一个小时来编程,我是自学的,所以如果不可能做到这一点,答案能否解释请从技术上解释为什么这不可能Entity Framework。因为我自己找不到任何实质性的东西。
感谢@Bagus Tesa,我能够解决这个问题。
正如 Bagus tesa 所说,制作一个 interface
来引用 Entities
的共同属性,并用 Entities
引用 interface
并以此方式进行扩展.
我用的代码,
public static IQueryable<IFilterEntity> FilterEntity(this BaseViewModel vm,
IQueryable<IFilterEntity> list)
{
return list.Where(s => s.Name == vm.name &&
s.DateMonth == vm.Month &&
s.DateYear == vm.Year);
}
界面,
public interface IFilterEntity
{
string Name { get; set; }
int? DateYear { get; set; }
int? DateMonth { get; set; }
}
BaseViewModel,
public class BaseViewModel
{
string Name => RootVm.Name;
int? DateYear => RootVm.SelectedDate.Month;
int? DateMonth => RootVm.SelectedDate.Month;
}
感谢您的帮助。我希望这对其他人有帮助。
使用这个
public IEnumerable<TEntity> Filter(Expression<Func<TEntity, bool>> filter, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null)
{
db.Set<TEntity>().AsNoTracking().AsQueryable().Where(filter);}