2016-11-28 35 views
-3

我使用一個列表,其中AccountInformation有三個屬性獲得合併的數據

public class AccountInformation 
{ 
     public string AccountNumber{ get; set; } 
     public int StartDate { get; set; } 
     public int EndDate{ get; set; } 
} 

現在我得到我的數據進行處理列表這樣

AccountNumber StartDate EndDate 
AC1   20150101 20150110 
AC1   20150110 20150111 
AC1   20150111 20150112 
AC2   20150112 20150115 
AC1   20150116 20150120 
AC1   20150121 20150125 
AC2   20150125 20150130 
AC2   20150130 20150205 

現在我需要在下面的方式

AccountNumber StartDate EndDate 
AC1   20150101 20150111 
AC2   20150112 20150115 
AC1   20150116 20150120 
AC1   20150121 20150125 
AC2   20150125 20150005 

這個數據作爲最終輸出裝置無論我在哪裏g ^將連續的AccountNumber設置爲相同,並且第一行的EndDate與下一行的StartDate相同,我需要合併這些行。

任何幫助表示讚賞。

+1

而*如何*您合併嗎?結果條目有什麼'AccountNumber'和'Start/-EndDate'? – HimBromBeere

+0

這可以通過一個簡單的循環完成,並且可能是另一個列表來保存所需的數據。你是否嘗試循環查看列表? –

+0

我嘗試遍歷for循環,並創建了兩個列表,一個包含相同的AccountNumber和StartDate和EndDate,另一個包含具有不同AccountNumber的對象。之後,我在第一個列表上完成了一些操作,然後將第一個列表結果合併到第二個列表中......但這個解決方案似乎不可行。 –

回答

0
int outer = 0; 

while (outer < accInfo.Count - 1) 
{ 
    if (accInfo[outer].AccountNumber == accInfo[outer + 1].AccountNumber && accInfo[outer].EndDate == accInfo[outer + 1].StartDate) 
    { 
     if (resultAccInfo.Count == 0) 
     { 
      resultAccInfo.Add(new AccountInformation() 
      { 
       AccountNumber = accInfo[outer].AccountNumber, 
       StartDate = accInfo[outer].StartDate, 
       EndDate = accInfo[outer + 1].EndDate 
      }); 
     } 

     else 
     { 
      resultAccInfo[resultAccInfo.Count - 1].EndDate = accInfo[outer + 1].EndDate; 
     } 

     outer++; 
    } 
    else 
    { 
     resultAccInfo.Add(new AccountInformation() 
     { 
      AccountNumber = accInfo[outer + 1].AccountNumber, 
      StartDate = accInfo[outer + 1].StartDate, 
      EndDate = accInfo[outer + 1].EndDate 
     }); 

     outer++; 
    } 
} 
+0

感謝您的解決方案。它按照我的要求工作。 –

2
class Program 
{ 
    public class AccountInformation 
    { 
     public string AccountNumber { get; set; } 
     public int StartDate { get; set; } 
     public int EndDate { get; set; } 
    } 

    static void Main(string[] args) 
    { 
     List<AccountInformation> accounts = new List<AccountInformation>(); 
     accounts.Add(new AccountInformation() { AccountNumber = "AC1", StartDate = 20150101, EndDate = 20150110 }); 
     accounts.Add(new AccountInformation() { AccountNumber = "AC1", StartDate = 20150110, EndDate = 20150111 }); 
     accounts.Add(new AccountInformation() { AccountNumber = "AC1", StartDate = 20150111, EndDate = 20150112 }); 
     accounts.Add(new AccountInformation() { AccountNumber = "AC2", StartDate = 20150112, EndDate = 20150115 }); 
     accounts.Add(new AccountInformation() { AccountNumber = "AC1", StartDate = 20150116, EndDate = 20150120 }); 
     accounts.Add(new AccountInformation() { AccountNumber = "AC1", StartDate = 20150121, EndDate = 20150125 }); 
     accounts.Add(new AccountInformation() { AccountNumber = "AC2", StartDate = 20150125, EndDate = 20150130 }); 
     accounts.Add(new AccountInformation() { AccountNumber = "AC2", StartDate = 20150130, EndDate = 20150205 }); 

     List<AccountInformation> newAccounts = new List<AccountInformation>(); 
     AccountInformation previousAccount = null; 
     bool continous = false; 
     for (int index=0;index<accounts.Count;index++) 
     { 

      if (null != previousAccount) 
      { 
       if (accounts[index].AccountNumber.Equals(previousAccount.AccountNumber) && 
        accounts[index].StartDate == previousAccount.EndDate) 
       { 
        continous = true; 
        if (!(continous && newAccounts.Count>0)) 
        { 
         newAccounts.Add(previousAccount); 
        } 
       } 
       else 
       { 
        continous = false; 
        newAccounts.Add(accounts[index]); 
       } 
      } 
      previousAccount = accounts[index]; 
     } 
    } 
} 
+0

此解決方案不是以正確的方式計算同一帳戶的StartDate和Enddate。它始終以StartDate和EndDate的第一條記錄 –