Я создаю приложение Xamarin Cross Platform в VS2017, которое использует базу данных SQLite, и я пытаюсь понять, как выполнить запрос, используя внутреннее соединение. Я использую пакет NuGet sqlite-net-pcl.
Я создал базу данных, используя DB Browser для SQLite. У меня есть 2 простые таблицы.
class Crime
{
[PrimaryKey, AutoIncrement]
public int Id {get; set; }
[NotNull]
public string Name { get; set; }
[NotNull]
public int Legislation { get; set; }
}
class Legislation
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[NotNull]
public string Title { get; set; }
}
Использование браузера БД У меня настроен внешний ключ для Crime.Legislation, связанный с Legislation.Id.
Я легко могу запросить одну таблицу и заполнить список, используя код ниже.
public partial class LegislationListPage : ContentPage
{
private SQLiteAsyncConnection _connetion;
private ObservableCollection<Legislation> _legislations;
public LegislationListPage ()
{
InitializeComponent ();
_connetion = DependencyService.Get<ISQLiteDb>().GetConnection();
}
protected override async void OnAppearing()
{
await _connetion.CreateTableAsync<Legislation>();
var legislations = await _connetion.Table<Legislation>().OrderBy(x => x.Title).ToListAsync();
_legislations = new ObservableCollection<Legislation>(legislations);
legislationList.ItemsSource = _legislations;
}
}
На другой странице я хочу выполнить запрос, который возвращает столбец «Имя» из «Преступления» и столбец «Заголовок» из законодательства.
Я могу добиться этого в SQL в браузере БД, используя
select c.Name, l.Title from Legislation as l inner join Crimes as c on l.Id = c.Legislation
Однако я не знаю, как это сделать с помощью c #, как я делал с предыдущими запросами. Я не могу найти какие-либо методы .join или что-нибудь подобное. Я надеюсь сохранить результаты в списке, основанном на классе, который создается на лету, но я не уверен, возможно ли это, поэтому я счастлив создать новый класс для хранения результата двух строк это будет возвращено. Конечная цель - заполнить список результатами.
Если бы кто-то мог указать мне правильное направление, это было бы здорово.
Заранее спасибо.