如何在linq中填充单个属性?

时间:2018-04-12 19:58:17

标签: vb.net linq linq-to-entities

我有一个LINQ查询,它从2个表中检索值:

    Dim query =  From t1 In context.table1
                 Join t2 In context.table2
                 On t1.ID Equals t2.ID
                 Select t1, t2

table1有一个类型为table2的未映射属性,我想使用选定的t2值填充该属性。

我尝试过使用以下内容:

For Each val In query.AsEnumerable() 
    val.t1.t2property = val.t2
Next

当我运行代码时,t2property没有被填充(可能是因为由于延迟加载而未加载查询(请随时在此处更正))。

增加的复杂性是我必须将此查询用作对数据库的另一个查询中的源列。

有没有办法在初始查询中填充t2property中未映射的select

或者我可以做些什么来分配val.t1.t2property = val.t2

1 个答案:

答案 0 :(得分:1)

为LINQ查询分配变量时,不会为变量分配查询结果,而是分配稍后可以执行的查询。当您执行导致查询执行的操作时,从查询返回的对象将从数据库中实例化并在内存中创建。

当您对For Each执行query循环时(AsEnumerable()此处没有任何帮助),将执行查询,table1和{{1}的对象创建了匿名对象,并从包含table2t1

创建匿名对象

退出t2循环后,所有这些对象都被丢弃,下次执行For Each时,将从数据库中提取新数据并创建新对象。

如果您需要保留并修改或查询内存中的对象,则需要将query的类型更改为容纳对象的内容。通常,这将是queryArray,通常,List是更好的选择。

ToList