Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在联接查询中更新两个表中同名的两列_Sql_Linq - Fatal编程技术网

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}
}