多个表格上的IMobileServiceSyncTable“ Where”子句

时间:2018-07-03 10:39:26

标签: c# .net xamarin azure-sql-database azure-mobile-services


我实际上正在为Xamarin Forms应用程序使用Microsoft Azure EasyTables。

我有两个对象:“中心”和“城市”。一个城市可以由多个中心拥有,因此我创建了一个名为“ CenterCity”的表,其中包含两个字段“ CenterID”和“ CityID”。

在数据服务对象中,我为每种对象类型创建了一个IMobileServiceSyncTable。 所以我有三个表对象:

  • IMobileServiceSyncTable

  • IMobileServiceSyncTable

  • IMobileServiceSyncTable

我的目标是检索一个中心拥有的所有城市。
如何实现?
这是我实际使用的代码,但是我确定它不是正确的代码,因为它使用了多个ReadAsync。

var l_arcResult = new List<City>();

var l_qCenterCities = m_msstCenterCities.Where(X => X.CenterID == p_strCenterGespotID);

foreach(var l_ccCurrent in await m_msstCenterCities.ReadAsync(l_qCenterCities))
{
  var l_qCity = m_msstCities.Where(X => X.GespotID == l_ccCurrent.CityID);

  foreach(var l_cCurrent in await m_msstCities.ReadAsync(l_qCity))
    l_arcResult.Add(l_cCurrent);
}

return (new List<City>());

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

我有两个对象:“中心”和“城市”。一个城市可以由多个中心拥有,因此我创建了一个名为“ CenterCity”的表,其中包含两个字段“ CenterID”和“ CityID”。

据我了解,您正在处理中心城市之间的多对多关系。

  

我的目标是检索一个中心拥有的所有城市。   如何实现?

要检索特定中心下的所有城市,您的代码看起来不错。此外,您还可以使用以下代码段:

var l_arcResult = new List<City>();
var cityIds=await m_msstCenterCities
       .Where(X => X.CenterID == p_strCenterGespotID)
       .Select(x=>x.CityID)
       .ToListAsync();
var cities=await m_msstCities.Where(X => cityIds.Contains(X.GespotID)).ToListAsync();
if(cities!=null)
    l_arcResult.AddRange(cities);

此外,您可以关注艾德里安·霍尔(Adrian Hall)关于The Mobile Client的书。


更新:

AFAIK,在使用移动客户端SDK时,您不仅可以使用单个代码行来满足您的要求。或者,您可以直接使用其他第3个库执行一条SQL语句,如下所示:

select c.*
from CenterCity cc
left join City c on cc.CityId == c.id
where cc.CenterId = '{center-id}'