npoco 的这个查询如何动态化
How can be dynamic this query of npoco
而不是像这样向每个 class 添加搜索方法;
public List<InvoiceDetail> SearchById(int Id)
{
return db.Query<InvoiceDetail>()
.Where(x => x.Id == Id)
.ToList();
}
如何像这样向基 class 添加方法;
public virtual List<T> SearchById(int Id)
{
return db.Query<T>()
.Where(x => x.Id == Id)
.ToList();
}
"T does not contain a definition for Id"
因为Id是Detail实体的定义。
您可以通过创建基数 class 来实现此目的:
public class BaseEntity
{
public int Id { get; set; }
}
然后使适当的实体 classes 从 BaseEntity
继承为:
public class Detail : BaseEntity
{
//some props for Detail class only
}
现在对于您的搜索方法,您可以使用 where T : class
约束作为:
public List<T> SearchById<T>(int id) where T : BaseEntity
{
return db.Query<T>()
.Where(x => x.Id == Id)
.ToList();
}
而不是像这样向每个 class 添加搜索方法;
public List<InvoiceDetail> SearchById(int Id)
{
return db.Query<InvoiceDetail>()
.Where(x => x.Id == Id)
.ToList();
}
如何像这样向基 class 添加方法;
public virtual List<T> SearchById(int Id)
{
return db.Query<T>()
.Where(x => x.Id == Id)
.ToList();
}
"T does not contain a definition for Id"
因为Id是Detail实体的定义。
您可以通过创建基数 class 来实现此目的:
public class BaseEntity
{
public int Id { get; set; }
}
然后使适当的实体 classes 从 BaseEntity
继承为:
public class Detail : BaseEntity
{
//some props for Detail class only
}
现在对于您的搜索方法,您可以使用 where T : class
约束作为:
public List<T> SearchById<T>(int id) where T : BaseEntity
{
return db.Query<T>()
.Where(x => x.Id == Id)
.ToList();
}