2016-11-28 42 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的第一条记录 –