Sql 如何在联接查询中更新两个表中同名的两列
我得到一个错误: 属性或索引器无法分配给“-”它是只读的 尝试更新联接查询中两个表中同名的两列时。我怎样才能让它工作?谢谢Sql 如何在联接查询中更新两个表中同名的两列,sql,linq,Sql,Linq,我得到一个错误: 属性或索引器无法分配给“-”它是只读的 尝试更新联接查询中两个表中同名的两列时。我怎样才能让它工作?谢谢 在投影中创建的匿名对象(“选择新”部分)是只读的,数据上下文不会以任何方式跟踪其属性 相反,您可以尝试以下方法: //... select new { p1 = p, p2 = t } foreach (var row in updates) { row.p1.Processed = true; row.p2.Processed = tr
在投影中创建的匿名对象(“选择新”部分)是只读的,数据上下文不会以任何方式跟踪其属性 相反,您可以尝试以下方法:
//...
select new
{
p1 = p,
p2 = t
}
foreach (var row in updates)
{
row.p1.Processed = true;
row.p2.Processed = true;
}
为了提高性能,您可能还需要查看实体框架扩展的批量更新功能(如果您使用的是实体框架):是的,这是由于匿名类型属性是只读的,请访问: 匿名类型提供了一种封装一组 将只读属性转换为单个对象,而无需显式 首先定义一个类型 我建议您使用所需的两个实体(DTO)创建一个自定义类:
在投影中使用它,您需要实体实例,而不仅仅是要修改的属性,因为,当您修改
foreach
中的Processed
属性时,代表您实体的代理类将把您实体的状态更改为Updated
您试图做什么?我正在尝试为表中的每一行将p.Processed和t.Processed列更新为true。请看,这并不能解决我的问题谢谢,这回答了我的问题,解决了我的问题。此外,我正在使用EF,因此感谢您的链接。
public class PassengerDTO
{
public Passenger Passenger {get;set}
public PassengerItinerary PassengerItinerary {get;set}
}