c# - 使用 Azure 移动服务从多个表读取数据

标签 c# linq sql-server-2008 azure azure-mobile-services

我有 3 张 table :

表:男人

    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 读取此表?

最佳答案

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

关于c# - 使用 Azure 移动服务从多个表读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29906220/

相关文章:

c# - 从 Excel 文件加载数据并加载到临时表中

c# - 为什么 Entity Framework 不在此处更新子对象?

c# - 如何模拟 Url.Action

c# - .Any 导致转换为值类型 'Boolean' 失败,因为物化值为 null

asp.net - LINQ to SQL Web 应用程序最佳实践

c# - 如何按内部列表对项目进行分组

sql-server - 慢速 SQL Server CLR 聚合

sql-server - 为什么在导入UTF-8平面文件时SSIS不能识别换行{LF}行定界符?

c# - “检测到无法访问的代码”我已经查看了其他无法访问的代码,但我似乎无法修复我的,halp

c# - Entity Framework 6 SqlFunctions DateDiff 未在 nuget 包中实现