使用linq按列索引访问数据对象的列

时间:2015-03-14 06:51:35

标签: c# linq

我有一个表客户,列[a1,a2,a3,... a10] 我需要通过数字来访问它们,例如设置a3,a4,a5值,使用数字代替它们的真实名称,如customer [4] = 1。 可能吗?

2 个答案:

答案 0 :(得分:0)

查看此链接: Generic Field and SetField Methods (LINQ to DataSet)

  

编辑1:

您提供的信息有限

此代码可以帮助您

public class Customer
{
    public int ID { get; set; }
    public string Name { get; set; }
}

从反思开始(注意,这很慢 - 虽然适用于适量的数据):

var customer = new Customer();
var props = customer.GetType().GetProperties();
props[0].SetValue(customer, 1);
props[1].SetValue(customer, "hamix");
Console.WriteLine(props[0].GetValue(customer));
Console.WriteLine(props[1].GetValue(customer));

答案 1 :(得分:0)

您可以通过indexed property

执行此操作
class Customer
{
    private static PropertyInfo[] _propertyInfos 
        = typeof(Customer).GetProperties()
                          .Where (x => x.Name.StartsWith("A")).ToArray();

    public int A1 { get; set; }
    public int A2 { get; set; }
    public int A3 { get; set; }

    public int this[int index]
    {
        get
        {
            return (int)(_propertyInfos[index - 1].GetValue(this) ?? 0);
        }
        set
        {
            _propertyInfos[index - 1].SetValue(this, value);
        }
    }
}

(省略_propertyInfos数组的边界检查)

然而,我怀疑你是否应该走这条路。设计闻起来很糟糕。