2015-04-27 99 views
2

我有3个表:读取数据

表:人

public string Id { get; set; } 
    [JsonProperty(PropertyName = "firstName")] 
    public string FirstName { get; set; } 

    [JsonProperty(PropertyName = "secondName")] 
    public string SecondName { get; set; } 

表:汽车

public string Id { get; set; } 

    [JsonProperty(PropertyName = "Name")] 
    public string CarName { get; set; } 

表:ManCar

public string Id { get; set; } 

    [JsonProperty(PropertyName = "manId")] 
    public string ManId { get; set; } 

    [JsonProperty(PropertyName = "carId")] 
    public string CarId { get; set; } 
C#从Azure代码读取日期:
public async Task<IEnumerable<String>> GetAllCarsByMan(Man man) 
    { 
     MobileServiceCollection<ManCar, ManCar> data; 
     IMobileServiceTable<ManCar> dataTable = App.MobileService.GetTable<ManCar>(); 
     try 
     { 
      data = await dataTable 
       .Where(item => item.ManId == man.Id).Select(menuItem => menuItem.CarId) 
       .ToCollectionAsync(); 
     } 
     catch (MobileServiceInvalidOperationException ex) 
     { 
      Tools.errorList.AddMessage("AzureDataProvider.LoadData" + ex.ToString()); 
     } 

     return data; 
    } 


public async Task<IEnumerable<Car>> GetAllCarsForAllMen() 
    { 
     List<Car> listOfCars = new List<Car>(); 
     MobileServiceCollection<Man, Man> data; 
     IMobileServiceTable<Man> dataTable = App.MobileService.GetTable<Man>(); 
    try 
     { 
      data = await dataTable.Where.ToCollectionAsync(); 

      foreach (var man in data) 
      { 
       var cars = await GetAllCarsByMan(Man man); 

       if (cars.Count>0) 
       { 
       IMobileServiceTable<Car> dataCar = App.MobileService.GetTable<Car>(); 
        foreach (var car in cars) 
        { 
         data = await dataTable.Where(item => item.Id == car).ToCollectionAsync(); 
         if(data[0]!=null) 
         { 
         listOfCars.Add(data[0]); 
         } 
        } 
       }      
      } 
     } 
     catch (MobileServiceInvalidOperationException ex) 
     { 
      Tools.errorList.AddMessage("AzureDataProvider.LoadData" + ex.ToString()); 
     } 

     return listOfCars; 
    } 

public async Task<IEnumerable<String>> GetAllCarsByMan(Man man) 
    { 
     MobileServiceCollection<ManCar, ManCar> data; 
     IMobileServiceTable<ManCar> dataTable = App.MobileService.GetTable<ManCar>(); 
     try 
     { 
      data = await dataTable 
       .Where(item => item.ManId == man.Id).Select(menuItem => menuItem.CarId) 
       .ToCollectionAsync(); 
     } 
     catch (MobileServiceInvalidOperationException ex) 
     { 
      Tools.errorList.AddMessage("AzureDataProvider.LoadData" + ex.ToString()); 
     } 

     return data; 
    } 

当我试图从这些平板电脑中获取数据时,它非常缓慢。如何使用AzureMobileServices从此表中读取数据?

回答

2

如您的代码所示,您可能知道如何使用LINQ查询。 你使用代码来访问你的数据库的方式是非常慢(例如,它会导致一个查询运行和每个人的汽车LINQ开销)
最好为您的服务编写一个API(CustomController)并使用LINQ连接语句来检索您的数据(要运行的单个实际查询)。
搜索Azure定制API和LINQ连接语句以获取更多信息