建設

2013-10-17 27 views
0

我有2代表具有以下數據建設

基於兩個列表的字符串/列表

父表

S.No Name  Fields 
111 Parent1 title,fname,mname,lname,addr1,city,state,zip,county 
112 Parent2 Address1,lname,firstName,suffix,countrycode,gender,zip,state,city,address2,email,phone 

子表

S.No mappingField FieldIndex ParentId 
1  FirstName  1   111 
2  LastName  3   111 
3  AddressLine1 4   111 
4  Country   8   111 
5  LastName  1   112 
6  FirstName  2   112 
7  zip    6   112 
8  state   7   112 
9  workemail  10   112 
10  workPhone  11   112 

現在我需要創建一個字符串FieldIndex(子表)基於字段(父表) ,格式如下。

我期待的輸出字符串的順序欄位(父)如果有任何映射字段(在兒童)可用然後它 應顯示和所有其他值應該用「$」符號替換..

ParentId 111 -- (9 fields) 
$|FirstName|$|LastName|AddressLine1|$|$|$|Country 

ParentId 112 --(12 fields) 
$|LastName|FirstName|$|$|$|zip|state|$|$|workemail|workPhone 

這裏是我的代碼:

private string mapping(ChildData, ParentData) 
    { 
     string[] fieldList = ChildData.Fields; 

     var IndInfoList = new List<string>(); 

     string[] headerList = ParentData.Fields.Split(','); 
     for (var i = 0; i < headerList.Length; i++) 
     {   
      bool alreadyAdded = false; 
      foreach (MyFields fields in fieldList) 
      { 
       if (i == ChildData.FieldIndex) 
       { 
        IndInfoList.Add(ChildData.mappingField); 
       } 
       else 
       { 
        if (!alreadyAdded) 
        { 
         IndInfoList.Add("$"); 
         alreadyAdded = true; 
        } 
       } 
      } 

     } 
     string dataMapString = string.Join("|", IndInfoList); 
     return dataMapString; 
    } 
+0

考慮編輯您的帖子以提出具體問題。從閱讀和重讀,你的文章,我不清楚你有什麼輸出和你期望的輸出。 –

+0

我期待的輸出字符串按照父表字段的順序,如果有任何映射字段(在兒童中)可用,那麼它應該顯示在其中,所有其他值應該用「$」符號替換。 – Henry

回答

0

LINQ可以簡化很多這爲你如

var items = new List<string>(parentList.Count); 
foreach (var p in parentList) 
{ 
    var fields = p.Fields.Split(','); 
    var childData = childList.Where(x => x.ParentId == p.Id).ToList(); 
    for (int i = 0; i <= fields.Length-1; i++) 
    { 
     var mappingField = childData.SingleOrDefault(x => x.FieldIndex == i).Select(x => x.mappingField); 
     fields[i] = mappingField ?? "$"; 
    } 
    items.Add(String.Join("|", fields)); 
} 
+0

感謝您的info.It看起來像你的代碼正在尋找父表中的所有ParentIds。我一次只需要一個父ID,假設我只需要父字段111的字段列。你可以給我代碼 – Henry

+0

@Henry這段代碼迭代*所有*父母並將所有相關的子字段映射到每一個。所以實際上,你應該結束你所說的你想要的輸出? – James

+0

我不想要所有的父母,我只想要一個父母。對於Parent 111,我希望格式爲「$ | FirstName | $ | LastName | AddressLine1 | $ | $ | $ | Country |」的輸出 – Henry