如何在 linq 中填充单个属性?
How can I populate a single attribute in linq?
我有一个从 2 个表中检索值的 LINQ 查询:
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
没有被填充(可能是因为延迟加载导致查询未加载(请随时在这里纠正我))。
增加的复杂性是我必须将此查询用作另一个数据库查询中的源列。
有没有办法从初始查询中的 select
填充未映射的 t2property
?
或者我可以做些什么来分配 val.t1.t2property = val.t2
?
当您为 LINQ 查询分配一个变量时,该变量分配的不是查询的结果,而是可以稍后执行的查询的表示。当您执行导致执行查询的操作时,将从查询返回的对象从数据库实例化并在内存中创建。
当你在 query
上执行 For Each
循环时(AsEnumerable()
在这里没有任何用处),查询被执行,对象 table1
和 table2
被创建,匿名对象从那些包含 t1
和 t2
.
的对象中创建
退出For Each
循环后,所有这些对象都被丢弃,下次执行query
时,将从数据库中提取新数据并创建新对象。
如果您需要保留并修改或查询内存中的对象,您需要将 query
的类型更改为可以保留对象的类型。通常这将是 Array
或 List
,一般来说,ToList
是更好的选择。
Dim query = (From t1 In table1
Join t2 In table2 On t1.ID Equals t2.ID
Select t1, t2).ToList()
For Each val In query
val.t1.t2property = val.t2
Next
我有一个从 2 个表中检索值的 LINQ 查询:
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
没有被填充(可能是因为延迟加载导致查询未加载(请随时在这里纠正我))。
增加的复杂性是我必须将此查询用作另一个数据库查询中的源列。
有没有办法从初始查询中的 select
填充未映射的 t2property
?
或者我可以做些什么来分配 val.t1.t2property = val.t2
?
当您为 LINQ 查询分配一个变量时,该变量分配的不是查询的结果,而是可以稍后执行的查询的表示。当您执行导致执行查询的操作时,将从查询返回的对象从数据库实例化并在内存中创建。
当你在 query
上执行 For Each
循环时(AsEnumerable()
在这里没有任何用处),查询被执行,对象 table1
和 table2
被创建,匿名对象从那些包含 t1
和 t2
.
退出For Each
循环后,所有这些对象都被丢弃,下次执行query
时,将从数据库中提取新数据并创建新对象。
如果您需要保留并修改或查询内存中的对象,您需要将 query
的类型更改为可以保留对象的类型。通常这将是 Array
或 List
,一般来说,ToList
是更好的选择。
Dim query = (From t1 In table1
Join t2 In table2 On t1.ID Equals t2.ID
Select t1, t2).ToList()
For Each val In query
val.t1.t2property = val.t2
Next