时间:2019-04-10 标签:c#sqliteinnerjoin
Posted
技术标签:
【中文标题】时间:2019-04-10 标签:c#sqliteinnerjoin【英文标题】:c# sqlite inner join 【发布时间】: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 方法或类似的方法。我希望将结果存储在基于动态创建的类的列表中,但我不确定这是否可能,所以我很高兴创建一个新类来保存两个字符串的结果那将被退回。最终目标只是用结果填充一个列表。
如果有人能指出我正确的方向,那就太好了。
提前致谢。
【问题讨论】:
【参考方案1】:好的,我设法找到了解决方案。真的很简单。我找不到 .join 方法,因为我没有“使用” System.Linq。
有两种方法。使用查询语法和 lambda。 Lambda 是我希望找到的,所以我很高兴我能成功。
对于其他在这里寻找类似东西的人来说,我有两种方法
// First I put both tables into separate lists ( var crimes and var legislation) using the
// way shown in my question. Code for that is omitted here
//Query style
var crimesListItems = from c in crimes
join l in legislations on c.Legislation equals l.Id
select new c.Name, l.Title ;
// Lambda style
var crimesListItems = crimes.Join(
legislations,
c => c.Legislation,
l => l.Id,
(c, l) => new c.Name, l.Title );
感谢 Jeremy Clark 和他的教程https://www.youtube.com/watch?v=tzR2qY6S4yw
【讨论】:
以上是关于时间:2019-04-10 标签:c#sqliteinnerjoin的主要内容,如果未能解决你的问题,请参考以下文章
时间:2019-04-10 标签:c#sqldataadapterparams in using
时间:2019-04-10 标签:c++win32SendInput()
时间:2019-04-10 标签:c#httpclient post force single packet