簡單的內連接結果與Dapper?

dapper

我似乎無法找到我的問題的文檔或示例(現在已經搜索了一段時間)。我認為我的問題很簡單,所以這裡就是這樣。

我有兩張桌子。我的主表名為Persons,輔助表名為PersonEntries。對於Person表中的每個人,我可以在PersonEntries表中有0個或更多個條目。喜歡這個。

Table: Person
Id
Name

Table: PersonEntry
PersonId
CheckinTime
CheckoutTime

我有兩個像這樣的對象

public class Person {
  public string Name;
  public List<PersonEntry> PersonEntries;
}

public class PersonEntry {
  public DateTime CheckinTime;
  public DateTime CheckoutTime;
}

如果我是從數據庫中獲取它到我的c#類中我該怎麼做?我可以將一個表映射到我的c#類中,並為每個表執行此操作,但隨後我將匹配哪些條目映射到哪個人。

我已經看過幾個將一個PersonEntry映射到一個Person的例子,這裡的問題是我有一個零對多的關係。我的人有一個PersonEntry項目列表

一般承認的答案

你可以做這樣的事情(參見https://www.tritac.com/blog/dappernet-by-example ):

public class Shop {
  public int? Id {get;set;}
  public string Name {get;set;}
  public string Url {get;set;}
  public IList<Account> Accounts {get;set;}
}

public class Account {
  public int? Id {get;set;}
  public string Name {get;set;}
  public string Address {get;set;}
  public string Country {get;set;}
  public int ShopId {get;set;}
}

var lookup = new Dictionary<int, Shop>()
conn.Query<Shop, Account, Shop>(@"
                SELECT s.*, a.*
                FROM Shop s
                INNER JOIN Account a ON s.ShopId = a.ShopId                    
                ", (s, a) => {
                     Shop shop;
                     if (!lookup.TryGetValue(s.Id, out shop)) {
                         lookup.Add(s.Id, shop = s);
                     }
                     if (shop.Accounts == null) 
                         shop.Accounts = new List<Account>();
                     shop.Accounts.Add(a);
                     return shop;
                 }
                 ).AsQueryable();
var resultList = lookup.Values;


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow