快速更新lambda表达式的方法

时间:2015-09-09 07:51:21

标签: c# lambda

以下是我如何从数据库获取数据并使用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] = ...;

或者有没有办法让它变得更好?
我只想动态分配字段名称。

4 个答案:

答案 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);
        }
    }
}