以下是我如何从数据库获取数据并使用lambda表达式进行更新。
item _myItem = db.myDBContext.items.Where(x => x.id == 0).SingleOrDefault();
_myItem.field1 = "myValueForField1";
_myItem.field2 = "myValueForField2";
_myItem.field3 = "myValueForField3";
_myItem.field4 = "myValueForField4";
db.myDBContext.SubmitChanges();
这只是一个样本,我的表有很多列 如果我按照这种方式,我必须分配每一列(field1,field2,..) 如果我有20列,我必须编写20行代码 我可以动态分配字段名称吗? 喜欢
_myItem[dynamicFieldName] = ...;
或者有没有办法让它变得更好?
我只想动态分配字段名称。
答案 0 :(得分:1)
不使用反射,您无法以这种方式动态分配字段。
使用反射,你可以,但是会有相关的性能损失。
例如:
var myField = "field1";
var field = _item.GetType().GetField(myField); // perhaps GetProperty() - depending on if its a field or a property.
field.SetValue(_item,"myValueForField1");
显然,这可以在一个循环中完成,所有的字段名都在一个数组或某种列表中。
答案 1 :(得分:1)
试试这个:
String s = "https://address.com/somestring/somestring-2/c100.200.3.4/somestrigx3/somestring.4";
Pattern pattern = Pattern.compile("(?<=/c)(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)");
Matcher matcher = pattern.matcher(s);
if (matcher.find()){
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
System.out.println(matcher.group(3));
System.out.println(matcher.group(4));
}
答案 2 :(得分:0)
您可以使用反射:
PropertyInfo pInfo = _myItem.GetType().GetProperty("field2"):
pInfo.SetValue(_myItem, "myValueForField2");
答案 3 :(得分:0)
你不能使用反射 您可以在Item类中创建索引器。并使用扩展方法转换为特定类型。
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
static class MyExtensions
{
public static int toInt32(this string field)
{
return Convert.ToInt32(field);
}
}
class MySpecificList
{
Dictionary<string, string> _fields = new Dictionary<string, string>();
public string this[string name]
{
get
{
return _fields[name];
}
set
{
_fields[name] = value;
}
}
static void Main(string[] args)
{
MySpecificList list = new MySpecificList();
list["field1"] = "1";
Console.WriteLine(list["field1"].toInt32() + 1);
}
}
}