基于数组映射enitity [英] Map enitity based on an array

查看:130
本文介绍了基于数组映射enitity的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个EF实体(基于一个表),它包含列名,如var1,var2,var3

如何将属性非常简单地映射到row [0],row [1] ,排[2]。哪一行是DataRow。

我最大的问题是Datatable对象并不总是具有相同的列数。



我的代码:

I have a EF Entity (based on a table) that hold column names like var1, var2, var3
How can I map the properties very simple to row[0], row[1], row[2]. Where row is a DataRow.
My biggest problem is that the Datatable object does not allways have the same number of columns.

My code:

private void AddExcelDataToEF()
        {
            string[] columnNames = _data.Columns.Cast<DataColumn>()
                                 .Select(x => x.ColumnName)
                                 .ToArray();
            using (var db = new Entities())
            {
                foreach (DataRow row in _data.Rows)
                {
                    var inputFile = new GL_InputTable();
                    inputFile.inputLineStatusID = 0;
                    inputFile.isDeleted = false;
                    inputFile.sourceFileID = _sourceFileID;
                    inputFile.lastModifiedBy = 0;
                    for (int lineNr = 0; lineNr < columnNames.Length; lineNr++)
                    {
                        switch (lineNr)
                        {
                            case 0: inputFile.lab1 = columnNames[lineNr]; inputFile.var1 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 1: inputFile.lab2 = columnNames[lineNr]; inputFile.var2 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 2: inputFile.lab3 = columnNames[lineNr]; inputFile.var3 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 3: inputFile.lab4 = columnNames[lineNr]; inputFile.var4 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 4: inputFile.lab5 = columnNames[lineNr]; inputFile.var5 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 5: inputFile.lab6 = columnNames[lineNr]; inputFile.var6 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 6: inputFile.lab7 = columnNames[lineNr]; inputFile.var7 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 7: inputFile.lab8 = columnNames[lineNr]; inputFile.var8 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 8: inputFile.lab9 = columnNames[lineNr]; inputFile.var9 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 9: inputFile.lab10 = columnNames[lineNr]; inputFile.var10 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 10: inputFile.lab11 = columnNames[lineNr]; inputFile.var11 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 11: inputFile.lab12 = columnNames[lineNr]; inputFile.var12 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 12: inputFile.lab13 = columnNames[lineNr]; inputFile.var13 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 13: inputFile.lab14 = columnNames[lineNr]; inputFile.var14 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 14: inputFile.lab15 = columnNames[lineNr]; inputFile.var15 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 15: inputFile.lab16 = columnNames[lineNr]; inputFile.var16 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 16: inputFile.lab17 = columnNames[lineNr]; inputFile.var17 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 17: inputFile.lab18 = columnNames[lineNr]; inputFile.var18 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 18: inputFile.lab19 = columnNames[lineNr]; inputFile.var19 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 19: inputFile.lab20 = columnNames[lineNr]; inputFile.var20 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 20: inputFile.lab21 = columnNames[lineNr]; inputFile.var21 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 21: inputFile.lab22 = columnNames[lineNr]; inputFile.var22 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 22: inputFile.lab23 = columnNames[lineNr]; inputFile.var23 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 23: inputFile.lab24 = columnNames[lineNr]; inputFile.var24 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 24: inputFile.lab25 = columnNames[lineNr]; inputFile.var25 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 25: inputFile.lab26 = columnNames[lineNr]; inputFile.var26 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 26: inputFile.lab27 = columnNames[lineNr]; inputFile.var27 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 27: inputFile.lab28 = columnNames[lineNr]; inputFile.var28 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 28: inputFile.lab29 = columnNames[lineNr]; inputFile.var29 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 29: inputFile.lab30 = columnNames[lineNr]; inputFile.var30 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 30: inputFile.lab31 = columnNames[lineNr]; inputFile.var31 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 31: inputFile.lab32 = columnNames[lineNr]; inputFile.var32 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 32: inputFile.lab33 = columnNames[lineNr]; inputFile.var33 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 33: inputFile.lab34 = columnNames[lineNr]; inputFile.var34 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 34: inputFile.lab35 = columnNames[lineNr]; inputFile.var35 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 35: inputFile.lab36 = columnNames[lineNr]; inputFile.var36 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 36: inputFile.lab37 = columnNames[lineNr]; inputFile.var37 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 37: inputFile.lab38 = columnNames[lineNr]; inputFile.var38 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 38: inputFile.lab39 = columnNames[lineNr]; inputFile.var39 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 39: inputFile.lab40 = columnNames[lineNr]; inputFile.var40 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 40: inputFile.lab41 = columnNames[lineNr]; inputFile.var41 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 41: inputFile.lab42 = columnNames[lineNr]; inputFile.var42 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 42: inputFile.lab43 = columnNames[lineNr]; inputFile.var43 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 43: inputFile.lab44 = columnNames[lineNr]; inputFile.var44 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 44: inputFile.lab45 = columnNames[lineNr]; inputFile.var45 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 45: inputFile.lab46 = columnNames[lineNr]; inputFile.var46 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 46: inputFile.lab47 = columnNames[lineNr]; inputFile.var47 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 47: inputFile.lab48 = columnNames[lineNr]; inputFile.var48 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 48: inputFile.lab49 = columnNames[lineNr]; inputFile.var49 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 49: inputFile.lab50 = columnNames[lineNr]; inputFile.var50 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 50: inputFile.lab51 = columnNames[lineNr]; inputFile.var51 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 51: inputFile.lab52 = columnNames[lineNr]; inputFile.var52 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 52: inputFile.lab53 = columnNames[lineNr]; inputFile.var53 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 53: inputFile.lab54 = columnNames[lineNr]; inputFile.var54 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 54: inputFile.lab55 = columnNames[lineNr]; inputFile.var55 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 55: inputFile.lab56 = columnNames[lineNr]; inputFile.var56 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 56: inputFile.lab57 = columnNames[lineNr]; inputFile.var57 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 57: inputFile.lab58 = columnNames[lineNr]; inputFile.var58 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 58: inputFile.lab59 = columnNames[lineNr]; inputFile.var59 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            case 59: inputFile.lab60 = columnNames[lineNr]; inputFile.var60 = row[lineNr] == DBNull.Value ? null : row[lineNr].ToString(); break;
                            default: break;
                        }
                    }
                    db.GL_InputTable.Add(inputFile);
                }
                db.SaveChanges();
            }
        }





我的尝试:



无法弄清楚如何以简单的战略方式解决这个问题。

我不想要60个案例的开关案例陈述!!



What I have tried:

Can't figure out how to solve this in a simple strategic manner.
I don't want a switch case statement with 60 cases !!

推荐答案

这有点粗糙,可能需要som nullcheck但这应该可行:)



This is a bit crude and could require som nullchecking but this should work :)

public class RowMapper
    {
        /*
            The way i read your sample is you get a datatable with columns and rows, 
            these are to be mapped to an entity which presumably doesn't require all columns filled.
            Those datatables however can have different set of columns defined.

            GL_InputTable entity apparently contains the columns 'var1' to 'var60' and 'lab1' to 'lab60'
         * */

        public void AddToDb(DataTable dataTable)
        {
            using (var db = new Entities())
            {
                for (int idx = 0; idx < dataTable.Rows.Count; idx++)
                {
                    GL_InputTableRow newrow;
                    GetMapAblesInRow(dataTable, idx, out newrow);
                    db.GL_InputTable.Add(newrow);
                }
                db.SaveChanges();
            }
        }

        private void GetMapAblesInRow(DataTable dataTable, int idxRow, out GL_InputTableRow outEntityTableRow)
        {
            var efTable = new GL_InputTableRow();
            Type t = typeof(GL_InputTableRow);
            PropertyInfo[] propInfos = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);

            foreach (DataColumn clmn in dataTable.Columns)
            {
                PropertyInfo pi = propInfos.FirstOrDefault(p => p.Name == clmn.ColumnName);
                if (pi != null && pi.CanWrite)
                {
                    pi.SetValue(efTable, dataTable.Rows[idxRow][clmn.ColumnName].ToString());
                }
            }
            outEntityTableRow = efTable;
        }


    }


这篇关于基于数组映射enitity的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆