Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中分离列名和列值#_C# - Fatal编程技术网

C# 在C中分离列名和列值#

C# 在C中分离列名和列值#,c#,C#,我有一个employee对象,如下所示 class emp { public int EmpID { get; set; } public string EmpName { get; set; } public int deptID { get; set; } } 我需要在此类或其他类中创建映射,以映射具有我的SQL列名的属性 for eg. EmpdID="employeeID" EmpName="Employ

我有一个employee对象,如下所示

class emp
    {
        public int EmpID { get; set; }
        public string EmpName { get; set; }
        public int deptID { get; set; }

    }
我需要在此类或其他类中创建映射,以映射具有我的SQL列名的属性

for eg. EmpdID="employeeID"
        EmpName="EmployeeName"
        deptID="DepartmentID"
从asp.net页面创建employee类并将其传递给函数时:

for eg: emp e=new emp();
        e.EmpID=1;
        e.EmpName="tommy";    
        e.deptID=10;
填充emp对象并将其传递给buildValues函数时,它应返回ComumnName数组(例如employeeID):Value(例如1),EmployeeName:tommy,DepartmentID:10)

我有两个问题: 1.在哪里指定映射 2.如何在上面显示的buildValues函数中使用映射并构建值字符串数组


如果您能帮我解决这个问题,我将不胜感激。您需要使用反射


具体来说,您需要循环使用
typeof(Employee).GetProperties()

这是一个已解决的问题。对ORM做一些研究,看看这个问题:

首先,(正如前面所说的)最好把这种映射留给ORM工具,忘掉它们。然而,ORM工具在保护您免受数据访问的血淋淋的细节等方面往往过于“母性”,因此扩展它们或改变它们的行为可能会很复杂

也就是说,您可以创建一个特殊的类(映射),它将保存所有映射代码。映射本身最好保存在字典中,如下所示:

static class Mappings
{
    private static Dictionary<Type, Dictionary<string, string>> TypeMappings;

    private static Dictionary<string, string> EmployeeMapping;
    //... other mapped classes

    static Mappings()
    {
        TypeMappings = new Dictionary<Type, Dictionary<string, string>>();

        EmployeeMapping = new Dictionary<string, string>();
        EmployeeMapping.Add("EmpID", "EmployeeID");
        EmployeeMapping.Add("EmpName", "EmployeeName");
        EmployeeMapping.Add("DeptID", "DepartmentID");
        TypeMappings.Add(typeof(Employee),EmployeeMapping);


        //... other mapped classes
    }

    public static string[] BuildValues<T>(T item)
    {
        if (!TypeMappings.ContainsKey(typeof(T)))
            throw new Exception("wrong call");

        Dictionary<string, string> mapping = TypeMappings[typeof(T)];
        List<string> results = new List<string>();
        foreach (var keyValuePair in mapping)
        {
            string propName = keyValuePair.Key;
            string dbName = keyValuePair.Value;
            PropertyInfo pi = typeof(T).GetProperty(propName);
            object propValue = pi.GetValue(item, null);
            results.Add(string.Format("{0}:{1}", dbName, propValue));
        }
        return results.ToArray();
    }

}
静态类映射
{
私有静态字典类型映射;
私有静态字典EmployeeMapping;
//…其他映射类
静态映射()
{
TypeMappings=newdictionary();
EmployeeMapping=新字典();
EmployeeMapping.Add(“EmpID”、“EmployeeID”);
EmployeeMapping.Add(“EmpName”、“EmployeeName”);
EmployeeMapping.Add(“DeptID”、“DepartmentID”);
添加(typeof(Employee),EmployeeMapping);
//…其他映射类
}
公共静态字符串[]构建值(T项)
{
if(!TypeMappings.ContainsKey(typeof(T)))
抛出新异常(“错误调用”);
字典映射=类型映射[typeof(T)];
列表结果=新列表();
foreach(映射中的var keyValuePair)
{
字符串propName=keyValuePair.Key;
字符串dbName=keyValuePair.Value;
PropertyInfo pi=typeof(T).GetProperty(propName);
对象propValue=pi.GetValue(项,空);
Add(string.Format(“{0}:{1}”,dbName,propValue));
}
返回结果。ToArray();
}
}
这里,TypeMappings是所有映射类的字典,它们的映射依次位于propertyName-databaseName字典中


BuildValues方法采用这些名称,反映值,并生成一个结果字符串。

为什么要这样做?正如slack所问的,为什么要这样做?我正在处理的客户端有一个框架,它迫使我们传递我上面提到的值。首先要做的是。非常感谢你抽出时间。最后一个问题,从我的asp.net代码隐藏页面,我可以调用BuildValues方法并传递emp对象,如字符串[]values=BuildValues(emp);Sweko,还有一个问题是我的emp对象中是否有10个属性。如果我只为最后3个填充3,则值不会显示在字符串[]中,只有前3个显示为空值。您是否相应地修改了映射?
static class Mappings
{
    private static Dictionary<Type, Dictionary<string, string>> TypeMappings;

    private static Dictionary<string, string> EmployeeMapping;
    //... other mapped classes

    static Mappings()
    {
        TypeMappings = new Dictionary<Type, Dictionary<string, string>>();

        EmployeeMapping = new Dictionary<string, string>();
        EmployeeMapping.Add("EmpID", "EmployeeID");
        EmployeeMapping.Add("EmpName", "EmployeeName");
        EmployeeMapping.Add("DeptID", "DepartmentID");
        TypeMappings.Add(typeof(Employee),EmployeeMapping);


        //... other mapped classes
    }

    public static string[] BuildValues<T>(T item)
    {
        if (!TypeMappings.ContainsKey(typeof(T)))
            throw new Exception("wrong call");

        Dictionary<string, string> mapping = TypeMappings[typeof(T)];
        List<string> results = new List<string>();
        foreach (var keyValuePair in mapping)
        {
            string propName = keyValuePair.Key;
            string dbName = keyValuePair.Value;
            PropertyInfo pi = typeof(T).GetProperty(propName);
            object propValue = pi.GetValue(item, null);
            results.Add(string.Format("{0}:{1}", dbName, propValue));
        }
        return results.ToArray();
    }

}