IMobileServiceSyncTable «Где» предложение для нескольких таблиц - PullRequest
0 голосов
/ 03 июля 2018


На самом деле я использую Microsoft Azure EasyTables для своего приложения Xamarin Forms.

У меня есть два объекта: "Центр" и "Город". Город может принадлежать нескольким центрам, поэтому я создал таблицу с именем «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 голосов
/ 05 июля 2018

У меня есть два объекта: "Центр" и "Город". Город может принадлежать нескольким центрам, поэтому я создал таблицу с именем «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);

Более того, вы можете следить за книгой Адриана Холла о Мобильном клиенте .

<Ч />

UPDATE:

AFAIK, вы не можете использовать только одну строку кода для удовлетворения ваших требований при использовании мобильного клиентского SDK. Или вы можете напрямую использовать другие 3-ий библиотеки для выполнения одного оператора SQL следующим образом:

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