Linq使用join更新查询

时间:2016-01-18 13:47:22

标签: c# entity-framework linq

我只是尝试使用连接条件进行Linq查询更新

 var GsOrderUpdate = (from x in ctxParser.Tbl_Order_Hierarchy
                 join y in ctxParser.tbl_GS_Related_Orders
                 on x.RootOrder equals y.RelatedOrder
                 where y.ParentId == sParentId
                 select new
                 {
                     ID = x.ID,
                     RelatedOrderParentId = y.ID
                 });

foreach (var gs in GsOrderUpdate)
{
    gs.RelatedOrderParentId = gs.ID;
}

ctxParser.SaveChanges();

我正在谴责这个错误:

  

属性或索引器匿名类型RelatedOrderParentId无法分配给它是只读的。

如何解决此问题。

3 个答案:

答案 0 :(得分:1)

您不能使用匿名类型来更新EntityFramework。 如果您想更新,请尝试:

var GsOrderUpdate = (from x in ctxParser.Tbl_Order_Hierarchy
             join y in ctxParser.tbl_GS_Related_Orders
             on x.RootOrder equals y.RelatedOrder
             where y.ParentId == sParentId
             select new
             {
                 Parent = x,
                 Child = y
             });

foreach (var gs in GsOrderUpdate)
{
    gs.Child.RelatedOrderParentId = gs.Parent.ID;
}

ctxParser.SaveChanges();

答案 1 :(得分:0)

实体框架不跟踪匿名类型对象的更改。它只跟踪实体的变化。

您可以更改代码以执行以下操作:

var GsOrderUpdate = (from x in ctxParser.Tbl_Order_Hierarchy
                 join y in ctxParser.tbl_GS_Related_Orders
                 on x.RootOrder equals y.RelatedOrder
                 where y.ParentId == sParentId
                 select new
                 {
                     ID = x.ID,
                     Order = y
                 });

foreach (var gs in GsOrderUpdate)
{
    gs.Order.RelatedOrderParentId = gs.ID;
}

ctxParser.SaveChanges();

现在,您包含要更新的整个实体。

答案 2 :(得分:0)

使用Entity类而不是匿名对象:

var GsOrderUpdate = (from x in ctxParser.Tbl_Order_Hierarchy
                 join y in ctxParser.tbl_GS_Related_Orders
                 on x.RootOrder equals y.RelatedOrder
                 where y.ParentId == sParentId
                 select new YourEntityName
                 {
                     ID = x.ID,
                     RelatedOrderParentId = y.ID
                 });