【发布时间】:2019-06-02 20:30:55
【问题描述】:
我正在 VS2017 中创建一个使用 SQLite 数据库的 Xamarin 跨平台应用程序,并且我正在尝试研究如何使用内部联接执行查询。我正在使用 sqlite-net-pcl NuGet 包。
我使用 DB Browser for SQLite 创建了数据库。我有两张简单的桌子。
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 方法或类似的方法。我希望将结果存储在基于动态创建的类的列表中,但我不确定这是否可能,所以我很高兴创建一个新类来保存两个字符串的结果那将被退回。最终目标只是用结果填充一个列表。
如果有人能指出我正确的方向,那就太好了。
提前致谢。
【问题讨论】:
标签: c# sqlite inner-join