我正在构建WebApi2项目以公开一些RESTful服务。假设我有以下模型对象。未使用EF的WebApi字段过滤
public class Person
{
public string Name { get; set; }
public DateTime? Birthdate { get; set; }
public int Status { get; set; }
public List<Account> Accounts { get; set; }
}
public class Account
{
public decimal Amount { get; set; }
public string Code { get; set; }
public DateTime Expiry { get; set; }
}
在我的服务中,我必须去2个不同的系统检索个人的数据和人的帐户信息。显然,服务的实现看起来像
[HttpGet]
[Route("Person/{id:int}")]
public IHttpActionResult Get(string id)
{
var person = new Person();
person = GetPersonFromSystemA(id);
if (person.Status == 2)
{
person.Accounts = GetPersonAccountsFromSystemB(id);
}
return this.Ok(person);
}
我不能在这种情况下使用EF可言,所以的OData是非常棘手的。
我有一些要求,我需要提供过滤功能的服务客户端。客户可以决定返回哪些对象字段,这也意味着如果客户端不想包含该人员的账户信息,我应该跳过第二次调用系统B以避免整个子对象。
我做了一些快速搜索,但我找不到一些类似的解决方案。我知道我可以实现我自己的过滤语法,并让所有自定义代码使用过滤(通过有很多if/else)。
我在寻找更优雅的解决方案的一些想法。
感谢您的评论,您的实现假设我必须首先获取所有数据,无论它们是否有用,然后应用过滤。如果EF/OData实现使用延迟加载,则根本不会加载过滤出的日期。我也尝试实现类似的功能来加载我需要的数据,因为调用外部系统很昂贵。 – hardywang