asp.net 通用存储库中找到的属性

标签: Asp.net Linq C#
发布时间: 2017/3/26 2:17:13
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我与 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"获取的错误是没有定义的员工。这也意料之中。我需要做这整个的不同方式或是否有人知道如何解决这个问题?

我希望有人能帮助 !

解决方法 1:

使用接口,这样就能知道 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 将一名雇员。

有关约束的 MSDN 文章

赞助商