从ASP.NET Web API v2返回多个实体的字段

时间:2014-06-02 15:43:08

标签: entity-framework asp.net-web-api linq-to-entities anonymous-types

我正在构建一个ASP.NET Web API v2项目,我正在使用Entity Framework v6来建模数据库。到目前为止,只有当集合是一种对象类型时,我才能返回对象集合。即<Customer><Order>

我想返回一个对象集合,但是包含来自相关实体的字段(或属性)(存在关联)。我认为我正确地进行了LINQ to Entity查询设置,但我不确定如何将结果匿名类型返回到调用API的jQuery方法。

[Route("api/clients/GetAllClientsWithPaymentMethod")]
[HttpGet]
public NOT-SURE-WHAT-RETURN-TYPE-SHOULD-BE GetAllClientsWithPaymentMethod()
{
  using (var context = new MyEntities())
  {
    context.Configuration.ProxyCreationEnabled = false;
    var query = from client in context.Clients
                select new
                {
                  ClientID = client.ID,
                  CompanyName = client.CompanyName,
                  Phone = client.Phone,
                  Email = client.email
                  PaymentMethod = client.payments.PaymentMethod
                };
    return query.ToList();
  }
}

匿名类型是返回此信息的正确方法吗?如果是这样,返回类型应该是什么?有一个更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我会创建一个名为Client的类,其中包含您想要返回的所有字段。

e.g。

public class Client
{
    private int ID;
    private string companyName;
    private string phoneNumber;
    private string email;
    private string payMethod;


    public Client()
    {
    }

    //...etc

}

在控制器中,我将根据数据库查询的结果创建一组客户端对象,然后我将返回一个IEnumerable客户端,例如。

public IEnumerable<Client> GetAllClientsWithPaymentMethod()

在客户端,您可以使用正在使用的序列化程序读取消息的内容。

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("api/clients/GetAllClientsWithPaymentMethod");

IEnumerable<Client> returnedClients = response.Content.ReadAsAsync<Client>(new[] { JsonFormatter() }).Result;