C# Linq To Sqlite (Linq to SQL)
2023-01-25
筆記如何使用 Linq 讀取 Sqlite 的資料。
說明
要使用的技術為 Linq to Sql,這是一個已經逐漸 Deprecated 的資料庫存取技術,本次主要示範如何藉由其簡易地存取 Sqlite。
而本次所使用的 sqlite 檔案為 Northwind sqlite 版本,由 jpwhite3 / northwind-SQLite3 取得。
首先需要使用 nuget 安裝 System.Data.SQLite
,會一併安裝 System.Data.SQLite.EF6
以及 System.Data.SQLite.Linq
。
System.Data.Linq
System.Data.SQLite
System.Data.SQLite.EF6
System.Data.SQLite.Linq
要使用 LINQ 查詢 SQLite 資料,首先需要在專案中安裝 System.Data.SQLite 套件,然後使用 using System.Data.SQLite; 引用。
Controllers\HomeController.cs
using System.Data.SQLite;
using System.Data.Linq;
public ActionResult SQLite()
{
using (var connection = new SQLiteConnection("Data Source=|DataDirectory|\\northwind.db"))
{
var context = new DataContext(connection);
var results = context.GetTable<Dtos.Customer>().Where(c => c.City == "London");
return View(results.ToList());
}
}
為了讓 context.GetTable<Dtos.Customer>
可以正確對應,必須建立類別與 Sqlite 的資料表進行對應 (這邊是直接用 Entity Framework 所產生的類別加以修改),必須加入 Table
以及 Column
的 Attribute 來達成正確的對應。
\Dtos\Customer.cs
using System.Data.Linq.Mapping;
namespace NorthwindShop.Web.Dtos
{
[Table(Name = "Customers")]
public class Customer
{
[Column(IsPrimaryKey = true, IsDbGenerated = true)]
public string CustomerID { get; set; }
[Column]
public string CompanyName { get; set; }
[Column]
public string ContactName { get; set; }
[Column]
public string ContactTitle { get; set; }
[Column]
public string Address { get; set; }
[Column]
public string City { get; set; }
[Column]
public string Region { get; set; }
[Column]
public string PostalCode { get; set; }
[Column]
public string Country { get; set; }
[Column]
public string Phone { get; set; }
[Column]
public string Fax { get; set; }
}
}
完成設定後,經由 Action 的處理,即可在 View 中如期呈現:
Views\Home\SQLite.cshtml
@model IEnumerable<NorthwindShop.Web.Dtos.Customer>
@{
ViewBag.Title = "SQLite";
}
<h2>SQLite</h2>
<table class="table table-bordered table-striped">
<tr>
<th>
@Html.DisplayNameFor(model => model.CompanyName)
</th>
<th>
@Html.DisplayNameFor(model => model.ContactName)
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.CompanyName)
</td>
<td>
@Html.DisplayFor(modelItem => item.ContactName)
</td>
</tr>
}
</table>