任务:为实体框架实体编写通用扩展名
由于每个实体通常具有不同的属性,因此我不确定这是否可能,但是我有一组共享一些共同属性的实体,我想知道是否有可能建造通用扩展名,而不必总是为每个实体写出相同的代码。
我花了一些时间研究这个问题,但是并没有太多,这使我相信这是不可能的。
无论如何,与我更好的判断相反,我将在StackOverFlow上提出一个愚蠢的问题。
这就是我的想法,但显然是一个不可编译的示例,但至少您会明白。
public static List<TEntity> Generic<TEntity>(this DbContext db, string name)
{
return db.TEntity.Where(s => s.Name == name);
}
我朝着正确的方向戳将不胜感激。
为清楚起见,我从来没有在教室里花一个小时编程,我是自学成才的,所以如果不可能做到这一点,请回答可以从技术上解释为什么在实体框架中不可能做到这一点。因为我自己找不到任何重要的东西。
答案 0 :(得分:1)
感谢@Bagus Tesa,我能够解决这个问题。
如Bagus tesa所述,做一个interface
来引用Entities
的共同属性,并用interface
来引用Entities
并进行扩展。 / p>
我使用的代码,
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;
}
感谢您提供的所有帮助。我希望这对其他人有帮助。
答案 1 :(得分:0)
使用此
public IEnumerable<TEntity> Filter(Expression<Func<TEntity, bool>> filter, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null)
{
db.Set<TEntity>().AsNoTracking().AsQueryable().Where(filter);}