我有一個來自 sql 表的串列,模型如下所示:
public class ReservationReport
{
public string HotelName { get; set; }
public string First_Name { get; set; }
public string Last_Name { get; set; }
public string Gender { get; set; }
public DateTime Arrive { get; set; }
public DateTime AMDepart { get; set; }
public int companypay { get; set; }
public int selfpay { get; set; }
public int guestID { get; set; }
public string RoomType { get; set; }
public int Inventory_ID { get; set; }
public int HotelID { get; set; }
}
該串列目前都按每天分隔。我需要以顯示酒店以及哪些成員停留了多少天的方式組合它,例如:
來自 sql 的串列將如下所示
-約翰史密斯 1 號酒店,2 月 1 日 - 2 月 2 日
-Hotel 1 John smith,2 月 2 日 - 2 月 3 日
-Hotel 1 別人,2 月 1 日 - 2 月 2 日
-約翰史密斯 1 號酒店,2 月 10 日- 2 月 11 日
串列應顯示如下內容:
- 約翰史密斯 1 號酒店,2 月 1 日至 2 月 3 日(入住 2 天)
- 酒店 1 其他人,2 月 1 日至 2 月 2 日(入住 1 天)
- 約翰史密斯 1 號酒店,2 月 10 日至 2 月 11 日(入住 1 天)
我目前擁有的是以下代碼。我遇到的問題是,當一個人住在同一家酒店但在接觸之外的日子里,他們只在組合串列中出現一次。這是我目前擁有的
CombinedList = temp2.GroupBy(m => new { m.guestID, m.HotelID }).Select(group => group.First()).ToList();
foreach (var item in CombinedList)
{
// disposable list to get values for only the correct records
List<ReservationReport> dispose = temp2.Where(x => x.HotelID == item.HotelID && x.guestID == item.guestID ).ToList();
item.Arrive = dispose.Min(i => i.Arrive);
item.AMDepart = dispose.Max(i => i.AMDepart);
item.selfpay = dispose.Sum(i => i.selfpay);
item.companypay = dispose.Sum(i => i.companypay);
}
運行上面的代碼后,我的組合串列如下所示
- 酒店 1 其他人,2 月 1 日至 2 月 2 日(入住 1 天)
- 約翰史密斯 1 號酒店,2 月 1 日至 2 月 11 日(入住 10 天)
我的 combineList 呼叫只在它應該包含 3 行時給了我 2 行,問題是我不確定如何使用 2 個變數進行 lambda 或 linq 以及日期以這種方式彼此相鄰的位置。
任何幫助,將不勝感激。謝謝你。
uj5u.com熱心網友回復:
(我仍在尋找我了解這種方法的帖子;當我找到它時會在這篇帖子中參考它。)
您可以使用

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/428787.html
