[英]C# Passing Generic Class as a parameter to a custom Method
我正在尝试创建一个可以接受以下参数的通用函数。
下面是我要复制的函数的示例。
public List<T> GetDataPerPage<T>(IList<T> classType, int pageNum, int pageSize, string orderByColumn)
{
if (pageSize <= 0) pageSize = 10; // TODO: Default pageSize for the Moment
if (pageNum <= 0) pageNum = 1;
int excludedRows = (pageNum - 1) * pageSize;
return GetRepo<classType>().All(null).AsQueryable().Where(p => p.IsDeleted == false).OrderBy(p => p.orderByColumn).Skip(excludedRows).Take(pageSize).ToList();
}
我不确定如何将classType和orderByColumn传递给函数。
任何帮助将不胜感激。 谢谢
您根本不需要传递classType
参数,因为使用GetDataPerPage<T>()
方法时将声明类型T
,因此将其更改为:
public List<T> GetDataPerPage<T>(int pageNum, int pageSize, string orderByColumn)
{
if (pageSize <= 0) pageSize = 10; // TODO: Default pageSize for the Moment
if (pageNum <= 0) pageNum = 1;
int excludedRows = (pageNum - 1) * pageSize;
return GetRepo<T>().All(null)
.AsQueryable()
.Where(p => p.IsDeleted == false)
.OrderBy(p => p.orderByColumn)
.Skip(excludedRows)
.Take(pageSize)
.ToList();
}
至于orderByColumn
参数,如果您要像示例一样进行比较,则可以传入一个string
,但是如果您想控制比较的逻辑以使用类型为T
的string
属性,则可以传递一个这样的代表:
public List<T> GetDataPerPage<T>(int pageNum, int pageSize, Func<T, string> orderBy)
{
if (pageSize <= 0) pageSize = 10; // TODO: Default pageSize for the Moment
if (pageNum <= 0) pageNum = 1;
int excludedRows = (pageNum - 1) * pageSize;
return GetRepo<T>().All(null)
.AsQueryable()
.Where(p => p.IsDeleted == false)
.OrderBy(orderBy)
.Skip(excludedRows)
.Take(pageSize)
.ToList();
}
用法:
var list = GetDataPerPage<T>(pageNum, pageSize, p => p.Property1);
您已经知道“类类型” ..它的T
:
GetRepo<T>().All(null)...
对于OrderBy
..自己传递一个委托:
public List<T> GetDataPerPage<T>(IList<T> classType,
int pageNum,
int pageSize,
Func<T, object> orderBy)
{
...
return ... ... .OrderBy(orderBy)
}
然后像这样传递委托:
GetDataPerPage(..., ..., ..., x => x.SomePropertyHere);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.