我正在尝试使我的代码的一部分泛型。
非泛型代码:
public static User GetUser(int id)
{
using (var db = new BroodNodigContext())
{
return db.Users.FirstOrDefault(u => u.Id == id);
}
}
我需要的代码,但却被砍到了边缘:
public static object FooBar<T>(int id)
{
using (var db = new DatabaseContext())
{
return db.T.FirstOrDefault(t => t.Id == Id);
}
}
我得到的是:
public static object GetTypeOutOfDatabase<T>(int id)
{
using (var db = new DatabaseContext())
{
dynamic test = typeof(T);
db.Set<test>();
return null;
}
}
有人告诉我可以使用db.Set<>()
使其泛型,但我无法正确使用。
您是否知道如何将T
转换为引用类型(如User
),以便我可以将其放入db.set<>()
中
发布于 2017-12-13 16:00:12
实体框架提供了一个Find函数,它将通过主键进行查找。
注意,这是一个在方法中使用的object[],只需在一个让EF工作的函数中传递你的id,这很神奇,我提供了参数以使其更容易调用
public static object FooBar<T>(params object[] id)
{
using (var db = new DatabaseContext())
{
return db.Set<T>().Find(Id);
}
}
这将适用于您的用例,但稍后您可能会发现您需要生成自己的自定义表达式,这将稍微复杂一些
https://stackoverflow.com/questions/47797210
复制相似问题