我与 ASP.NET 使用通用存储库。正在查找对象的用户需要访问的类的属性的 Id,但在 linq 表达式的属性是当然不知道,因为它自己也不知道类型。有没有什么办法在这附近吗?
public virtual IEnumerable<T> GetByUser(string userId)
{
if (typeof(T).GetProperty("Employee") != null)
{
return Db.Set<T>().Where(x => x.Employee.Id == userId);
}
return new List<T>();
}
"x.Employee.Id"获取的错误是没有定义的员工。这也意料之中。我需要做这整个的不同方式或是否有人知道如何解决这个问题?
我希望有人能帮助 !
使用接口,这样就能知道 T
将具有某些属性。或使用基类型,然后使用泛型参数上的约束。
public virtual IEnumerable<T> GetByUser(string userId) where T : IEmployee
{
return Db.Set<T>().Where(x => x.Employee.Id == userId);
}
何地 IEmployee
看起来像这
public interface IEmployee
{
Employee Employee { get; set; }
}
显然这是有点粗糙,但具体取决于您的实体,这可能是一种方法。你可以始终映射出一切,然后建立您的共享属性等的接口。
不过,老实说我认为你最好的办法是有一套更功能的通用存储库。例如基地的回购,然后 EmployeeRepostiory
知道, T
将一名雇员。