我有一个存储库方法,它接受以下形式的参数:
public IEnumerable<TEntity> Get<TEntity>(Expression<Func<TEntity,string>> orderBy)
现在,在尝试按字符串类型
的属性排序时工作正常var entities = rep.Get(x => x.Name);
但如果我想按double或int或任何其他类型排序会怎么样。
像var entities = rep.Get(x => x.Price);
这样的事情显然会引发编译错误,说我无法将double转换为字符串。
如何使这更通用,以便我可以按实体中的任何属性排序,或者至少是类型实现IComparable或类似的属性?
答案 0 :(得分:2)
存储库类本身应该有一个类型参数。然后在访问存储库成员时不需要指定实体类型。像这样:
public interface IRep<TEntity>
{
IEnumerable<TEntity> Get<TOrderBy>(
Expression<Func<TEntity, TOrderBy>> orderBy
);
}
示例实体类:
public class MyEntity
{
public string Name { get; set; }
public decimal Price { get; set; }
}
示例存储库实现:
public class Rep<TEntity> : IRep<TEntity> { ... }
现在你可以像这样消费它:
var a = new Rep<MyEntity>();
var b = a.Get(x => x.Name); // string
var c = a.Get(x => x.Price); // decimal
这就是Linq的表现。 :)
答案 1 :(得分:1)
public IEnumerable<TEntity> Get<TEntity, TOrderBy>(Expression<Func<TEntity,TOrderBy>> orderBy)