我维护一个API,它根据对人员列表的请求,根据请求返回不同的结果集.例如,某些API客户端希望获取人员列表和他们的交互列表,其他人希望获得人员和他们的元数据列表.所有这些都可以在请求返回人员的API方法时指定.
这似乎不起作用:
using (var dbcontext = new ExampleEntities()) { var query = dbcontext.People.AsQueryable(); //determined in earlier application logic based on request if(includeMetadata) { query = query.Include("metadata"); } //determined in earlier application logic based on request if(includeInteractions) { query = query.Include("interactions"); } /* ...SNIP... */ }
我不想做的是:
var query = dbcontext.People.Include("Metadata").Include("interactions");
即使请求的API客户端不需要它们,这意味着每个获取一个人的请求都将包括所有相关实体.
我也不想编写每种可能的逻辑组合:
if(includeMetadata && includeInteractions) { var query = dbcontext.People.Include("Metadata").Include("interactions"); } else if(includeMetadata) { var query = dbcontext.People.Include("Metadata"); } else if(includeInteractions) { var query = dbcontext.People.Include("Interactions"); } else { var query = dbcontext.People; }
这将导致难以维护的代码,但是,我意识到如果需要我可以生成代码.