多个表上的 IMobileServiceSyncTable "Where" 子句
IMobileServiceSyncTable "Where" clause on multiple tables
实际上,我正在为我的 Xamarin Forms 应用程序使用 Microsoft Azure EasyTables。
我有两个对象:"Center" 和 "City"。一个城市可以由多个中心拥有,所以我创建了一个名为 "CenterCity" 的 table,其中包含两个字段 "CenterID" 和 "CityID".
在我的数据服务对象中,我为每个对象类型创建了一个 IMobileServiceSyncTable。
所以我有三个 table 个对象:
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>());
感谢您的帮助!
I have two objects : "Center" and "City". A city can be owned by several centers, so I created a table called "CenterCity" with two fields "CenterID" and "CityID".
据我了解,您正在处理 Center 和 City 之间的 Many:Many 关系。
My goal is to retrieve all the cities owned by one center.
How to achieve that ?
为了检索特定中心下的所有城市,您的代码看起来不错。此外,您还可以使用以下代码片段:
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 的书。
更新:
据我所知,在使用移动客户端 SDK 时,您不能仅使用单个代码行来满足您的要求。或者您可以直接使用其他第三个库来执行单个 SQL 语句,如下所示:
select c.*
from CenterCity cc
left join City c on cc.CityId == c.id
where cc.CenterId = '{center-id}'
实际上,我正在为我的 Xamarin Forms 应用程序使用 Microsoft Azure EasyTables。
我有两个对象:"Center" 和 "City"。一个城市可以由多个中心拥有,所以我创建了一个名为 "CenterCity" 的 table,其中包含两个字段 "CenterID" 和 "CityID".
在我的数据服务对象中,我为每个对象类型创建了一个 IMobileServiceSyncTable。 所以我有三个 table 个对象:
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>());
感谢您的帮助!
I have two objects : "Center" and "City". A city can be owned by several centers, so I created a table called "CenterCity" with two fields "CenterID" and "CityID".
据我了解,您正在处理 Center 和 City 之间的 Many:Many 关系。
My goal is to retrieve all the cities owned by one center. How to achieve that ?
为了检索特定中心下的所有城市,您的代码看起来不错。此外,您还可以使用以下代码片段:
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 的书。
更新:
据我所知,在使用移动客户端 SDK 时,您不能仅使用单个代码行来满足您的要求。或者您可以直接使用其他第三个库来执行单个 SQL 语句,如下所示:
select c.*
from CenterCity cc
left join City c on cc.CityId == c.id
where cc.CenterId = '{center-id}'