c# 需要为各种 类 提供一种扩展方法
c# need to have one extension method for various classes
我想做的是我需要为我的所有模型提供一种扩展方法。
假设我有 3 个 class/models。
- 模型 1
- 模型 2
- 模型 3
我正尝试在我的扩展方法中做类似的事情(未能成功)。
public static IQueryable<T> IncludeAllInfo<T>(this IQueryable<T> model)
{
if(model.getType().ToString() == "Model1")
{
var newModel = model.asQueryable<Model1>();
return newModel.Include(a => a.Model2).Include(a => a.Model3);
}
elseif(model.getType().ToString() == "Model2")
{
var newModel = model.asQueryable<Model2>();
return newModel.Include(a => a.Model3);
}
}
这是可能的还是我必须为每种类型创建重载方法?
为每个实体创建一个扩展
public static IQueryable<MyEntity> IncludeAllInfo(this Dbset<MyEntity> model)
{
return model.Include(a => a.Model3);
}
或者
public static IQueryable<MyEntity> IncludeAllInfo(this IQueryable<MyEntity> model)
{
return model.Include(a => a.Model3);
}
您应该为每种类型创建 1 个方法。
public static IQueryable<Model1> IncludeAllInfo(this IQueryable<Model1> model) {
return model.Include(a => a.Model2).Include(a => a.Model3);
}
public static IQueryable<Model2> IncludeAllInfo(this IQueryable<Model2> model) {
return model.Include(a => a.Model3);
}
这更容易测试、维护和阅读,而且代码比上面的少。
我想做的是我需要为我的所有模型提供一种扩展方法。
假设我有 3 个 class/models。
- 模型 1
- 模型 2
- 模型 3
我正尝试在我的扩展方法中做类似的事情(未能成功)。
public static IQueryable<T> IncludeAllInfo<T>(this IQueryable<T> model)
{
if(model.getType().ToString() == "Model1")
{
var newModel = model.asQueryable<Model1>();
return newModel.Include(a => a.Model2).Include(a => a.Model3);
}
elseif(model.getType().ToString() == "Model2")
{
var newModel = model.asQueryable<Model2>();
return newModel.Include(a => a.Model3);
}
}
这是可能的还是我必须为每种类型创建重载方法?
为每个实体创建一个扩展
public static IQueryable<MyEntity> IncludeAllInfo(this Dbset<MyEntity> model)
{
return model.Include(a => a.Model3);
}
或者
public static IQueryable<MyEntity> IncludeAllInfo(this IQueryable<MyEntity> model)
{
return model.Include(a => a.Model3);
}
您应该为每种类型创建 1 个方法。
public static IQueryable<Model1> IncludeAllInfo(this IQueryable<Model1> model) {
return model.Include(a => a.Model2).Include(a => a.Model3);
}
public static IQueryable<Model2> IncludeAllInfo(this IQueryable<Model2> model) {
return model.Include(a => a.Model3);
}
这更容易测试、维护和阅读,而且代码比上面的少。