【发布时间】:2020-05-31 20:37:32
【问题描述】:
我正在寻找一种在我的 linq 查询中使用反射来提高代码可重用性的方法。例如,我想改变这个方法:
private Orders GetObjectGraph(MyDbContext dbContext, int orderID)
{
return dbContext.Orders.Include(o => o.OrderDetails).AsNoTracking().FirstOrDefault(o => o.OrderID == orderID);
}
到这样的事情:
private object GetObjectGraph(MyDbContext dbContext, string masterEntityName, string detailsEntityName, string masterFieldName, object masterFieldValue)
{
return dbContext[masterEntityName].Include(o => o[detailsEntityName]).AsNoTracking().FirstOrDefault(o => o.[masterFieldName] == masterFieldValue);
}
谁能帮我完成这个任务?
提前致谢
【问题讨论】:
-
我会远离反射,但听起来像是泛型方法的用例,可能内置了一些规范模式。查看 eShopOnWeb 以了解实现
-
您只有实体的字符串名称吗?因为如果您在调用时知道实体类型,您可以将
string参数替换为Expressions并添加一个泛型类型来标识根实体。
标签: c# entity-framework linq asp.net-core entity-framework-core