2015-06-27 56 views
0
动态值分配给一列

我有以下情形:在LINQ

这是我的模型:

TableA{ 
    public int Id {get; set;} 
    public string Column1 {get; set;} 
    public string Column2 {get; set;} 
    public string Column3 {get; set;} 
    ... 
    public string ColumnN {get; set;} 
} 

TableB{ 
    public int Id {get; set;} 
    public string Column1 {get; set;} 
    public string Column2 {get; set;} 
    public string Column3 {get; set;} 
    ... 
    public string ColumnN {get; set;} 
} 

现在,让我们说,我想从TableA的复制(传输)一些值表B。为此,我在我的数据库中创建了一个表,其中我拥有TableA的哪个列与TableB关联的所有关系。

我用下面的代码来获取需要被复制的列:

var listColumnsToCopy = db.TableRelationsAB.Where(tf => tf.Copy == 1); 

有了,我有所有的列的列表被复制。

在这一点上,我试图用一个foreach语句在C#中要经过列在列表中,并能够只对那些列

Foreach(var col in listColumnsToCopy){ 
    TableA.col????? = "some value"; ---> HERE 
} 

上面的代码分配一个值是更换手动逐列:

TableA.Column1 = "some value" 
TableA.Column2 = "some value" 
... 
TableA.ColumnN = "some value" 

这可能吗?反射在这种情况下会起作用吗?

回答

1

简要回答:是

详细答案: 是,使用使用反射可以存档这样的行为,只是得到使用其名称为匹配的标准对应的表型的PropertyInfo对象,并设定所需的值。但那会很慢。最快的方法是编写SQL存储过程,或者至少使用动态编译。

0

是的,这可以通过这样的

var listColumnsToCopy = db.TableRelationsAB.Where(tf => tf.Copy == 1) 
         .Select(a=> new{ColumnA = a.Column1 
             ,ColumnB=a.Column2??"some value"}); 

这将由你的价值代替列2空值来实现;

,或者如果你有列2空字符串,而不是空的,你可以使用

var listColumnsToCopy = db.TableRelationsAB.Where(tf => tf.Copy == 1) 
         .Select(a=> new{ColumnA = a.Column1 
             ,ColumnB=a.Column2=""?"some value":a.Column2});