我從兩個不同的 API 呼叫中獲取資料。一個給我“客戶”資料,另一個給我“城鎮”資料。每個客戶都有一個城鎮參考,所以在我的應用程式中,我需要讓客戶物件參考實際的城鎮物件。這是我的課程的一個大大簡化的表示:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public int townId { get; set; }
public Town town { get; set; }
}
public class Town
{
public int townId { get; set; }
public string townName { get; set; }
}
我能想到實作目標的唯一方法如下(假設我實際上是從我的 API 呼叫中獲取串列,以下只是為了解釋問題):
List<Customer> customers = new List<Customer>();
customers.Add(new Customer { Id = 1, Name = "First Customer", townId = 10 });
customers.Add(new Customer { Id = 2, Name = "Second Customer", townId = 20 });
customers.Add(new Customer { Id = 2, Name = "Third Customer", townId = 20 });
List<Town> towns = new List<Town>();
towns.Add(new Town { townId = 10, townName = "Eton" });
towns.Add(new Town { townId = 20, townName = "Harrow" });
towns.Add(new Town { townId = 30, townName = "Cambridge" });
foreach(Customer c in customers)
{
c.town = towns.Where(t => t.townId == c.townId).FirstOrDefault();
}
這感覺不是實作我的目標的有效方式,尤其是當我有幾十個其他地方需要做同樣的事情時。
uj5u.com熱心網友回復:
根據您的評論所寫,您正在使用原始Customer物件而不分配Town給town屬性。
它應該是:
對于查詢運算式
customers = (from a in customers
join b in towns on a.townId equals b.townId
select new Customer
{
Id = a.Id,
Name = a.Name,
townId = a.townId,
town = b
})
.ToList();
對于方法運算式
customers = customers
.Join(towns,
x => x.townId,
x => x.townId,
(x, y) =>
{
var customer = x;
customer.town = y;
return customer;
})
.ToList();
uj5u.com熱心網友回復:
使用連接:
var results = (from c in customers
join t in towns on c.townId equals t.townId
select new { customer = c, town = t}
).GroupBy(x => x.customer.Name)
.ToDictionary(x => x.Key, y => y.First());
uj5u.com熱心網友回復:
因此,在您呼叫 2 個 API 之后。在添加到客戶物件時。
您可以執行以下操作,
customers.Add(new Customer
{
Id = cSerializedApiObj.Id,
Name = cSerializedApiObj.Name,
town = tSerializedAPiObjList.
FirstorDefault
(x=>x.townId==cSerializedApiObj.townId)
townId=town.townId //it isn't required anymore
});
現在您無需任何加入即可訪問客戶對應的城鎮。此外,可以有多種方法來有效地做到這一點。我更喜歡這種方式。如果您有任何疑問,請告訴我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/521153.html
標籤:C#api班级加入
