gpt4 book ai didi

c# sqlite 内连接

转载 作者:行者123 更新时间:2023-12-03 19:14:56 25 4
gpt4 key购买 nike

我正在 VS2017 中创建一个使用 SQLite 数据库的 Xamarin 跨平台应用程序,并且我正在尝试弄清楚如何使用内部联接执行查询。我正在使用 sqlite-net-pcl NuGet 包。

我使用 DB Browser for SQLite 创建了数据库。我有两张简单的 table 。

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 方法或类似的方法。我希望将结果存储在基于动态创建的类的列表中,但我不确定这是否可能,所以我很高兴创建一个新类来保存两个字符串的结果那将被退回。最终目标只是用结果填充列表。

如果有人能指出我正确的方向,那就太好了。

提前致谢。

最佳答案

好的,我设法找到了解决方案。真的很简单。我找不到 .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 上的教程

关于c# sqlite 内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54086872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com