我实际上正在为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>());
谢谢您的帮助!
答案 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}'