我正在使用 Dapper,當我執行查詢并加載到 SfDataGrid 時,只顯示第一個表的結果。
模型:
public class Users
{
public int id { get; set; }
public string name { get; set; }
public string email { get; set; }
public Roles role { get; set; }
}
public class Roles
{
public int id { get; set; }
public string name { get; set; }
}
所以當我喜歡
sfDataGrid1.DataSource = results;
它只顯示沒有角色名稱的用戶 ID、姓名、電子郵件。
詢問:
select a.*, b.name from users a inner join roles b on users.roleID = roles.id.
Tables users: id, name, email, roleID.
Table roles: id, name.
編輯:
public List<Users> GetUsers() {
using (IDbConnection connection = new MySql.Data.MySqlClient.MySqlConnection(Helper.CnnVal("db2021"))) { var sql = @"SELECT A.*, B.* FROM users A INNER JOIN Roles B on B.id = A.roleID";
var result = connection.Query<Users>(sql, (a, b) => { a.role = b; return a; }).ToList(); return result; }
}
List<Users> users = new List<Users>();
users = GetUsers();
sfDataGrid1.DataSource = users;
uj5u.com熱心網友回復:
假設你有一個像這樣的類角色
public class Roles
{
public int id {get;set;}
public string name {get;set;}
}
那么你的查詢應該是
public List<Users> GetUsers() {
using (IDbConnection connection = new MySql.Data.MySqlClient.MySqlConnection(Helper.CnnVal("db2021"))) {
var sql = @"SELECT A.*, B.* FROM users A INNER JOIN Roles B on B.id = A.roleID";
var result = connection.Query<Users,Roles,Users>(sql, (a, b) =>
{
a.role = b;
return a;
}).ToList();
return result;
}
}
List<Users> users = GetUsers();
sfDataGrid1.DataSource = users;
換句話說,您需要告訴 Dapper 代表 B.* 資料的類是什么以及 lambda 的回傳值是什么。
如果您想要一個同時包含用戶和角色名稱資料的類,那么您需要將此特定類定義為
public class UsersViewModel
{
public int id { get; set; }
public string name { get; set; }
public string email { get; set; }
public int roleid {get;set;}
public string rolename {get;set;}
}
并且查詢應該更改為以這種方式檢索資料
public List<Users> GetUsers()
{
using (IDbConnection connection = new MySql.Data.MySqlClient.MySqlConnection(....))
{
var sql = @"SELECT A.*, B.name as rolename
FROM users A INNER JOIN Roles B
ON B.id = A.roleID";
var result = connection.Query<UsersViewModel>(sql).ToList();
return result;
}
}
請注意,這不再是與資料庫欄位的一對一映射,因此我們有一個 ViewModel 類,我們適當地命名它以避免混淆。
同樣對于 dapper,查詢提取的屬性和列具有相同的名稱很重要;所以名字中的角色表列顯示為角色名在查詢中。這將允許 dapper 從查詢的結果集中構建 UserViewModel 類實體。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/406564.html
標籤:
上一篇:如何使用任務正確地在WinForms中從url異步抓取影像
下一篇:打開子表單會使UI控制元件重置
