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

次に、Field(親テーブル) に基づいて 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;
    }
4

1 に答える 1

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));
}
于 2013-10-17T13:08:35.523 に答える