我在C#class
中有以下结构public struct Employee
{
public const string EMPID = "EMP_ID";
public const string FName = "FIRST_NAME";
public const string LNAME = "LAST_NAME";
public const string DEPTID = "DEPT_ID";
}
是否有一种简单的方法来构建字符串,如下所示
const string mainquery="INSERT INTO EMP(EMP_ID,FIRST_NAME,LAST_NAME,DEPT_ID) VALUES(:EMP_ID,:FIRST_NAME,:LAST_NAME,:DEPT_ID)"
而不是如下 然后连接它。
const string EMP_COLS=
EMPLOYEE.EMPID + "," +
EMPLOYEE.FNAME + "," +
EMPLOYEE.LNAME + "," +
EMPLOYEE.DEPTID;
const string EMP_Values=
EMPLOYEE.EMPID + ":" +
EMPLOYEE.FNAME + ":" +
EMPLOYEE.LNAME + ":" +
EMPLOYEE.DEPTID;
答案 0 :(得分:4)
您可以尝试这样的事情:
StringBuilder sb = new StringBuilder();
var fields = typeof(Employee).GetFields();
for (int i = 0; i < fields.Length; ++i)
{
sb.Append(fields[i].GetValue(new Employee()));
if (i < fields.Length - 1)
{
sb.Append(',');
}
}
string result = sb.ToString();
// The above will be "EMP_ID,FIRST_NAME,LAST_NAME,DEPT_ID"
编辑:请注意,上面我假设您using
和System.Reflection
都有System.Text
个指令。
答案 1 :(得分:1)
如果struct只保存readonly属性而不是public consts,那么你可以使用Reflection进行。您可以致电Type.GetProperties
,循环浏览所有内容并调用它们以获取值并将值插入List<string>
,然后将其与string.Join(", ", myList);
或其他内容联系起来。
然后,您将字符串的第一部分设为EMP_ID, FIRST_NAME, LAST_NAME, DEPT_ID
,并且您需要复制该字符串并根据需要添加:
,并且您将拥有这两个部分。
答案 2 :(得分:1)
您可以使用string.Format(string format, object[] arg)
方法,如下所示:
string query = string.Format("INSERT INTO EMP({0},{1},{2},{3}) VALUES(:{0},:{1},:{2},:{3})",
Employee.EMPID,
Employee.FNAME,
Employee.LNAME,
Employee.DEPTID);
希望有所帮助。
答案 3 :(得分:0)
您需要某种映射字典,例如here,或者您可以使用一些ORM工具为您进行映射。
答案 4 :(得分:0)
string[] values = new[] {
"EMP_ID",
"FIRST_NAME",
"LAST_NAME",
"DEPT_ID",
};
var columns = string.Join(",", values);
var parameters = ":" + string.Join(",:", values);
var sql = string.Format("INSERT INTO EMP({0}) VALUES({1})",
columns,
parameters);
答案 5 :(得分:0)
string[] cols = typeof(Employee).GetFields()
.Select(f => f.GetValue(null).ToString()).ToArray();
Console.WriteLine(string.Format(
"INSERT INTO EMP({0}) VALUES(:{1})",
string.Join(",", cols),
string.Join(",:", cols)));