更新Linq中临时表的查询

时间:2013-04-04 08:03:19

标签: sql sql-server linq stored-procedures linqpad

嘿伙计们我是Linq的新手,我正在尝试转换存储过程。但我很难在LINQ中编写更新查询,我在SP中的查询就像

 UPDATE @tempTable1
 SET someColumn = 1
 FROM @tempTable1 p, @tempTable2 t2, NonTempTable nt
 WHERE t1.id = t2.id
   AND t1.id = nt.id
   AND nt.status = 'abcd';

我在LINQ

中写了以下转换以上查询
 var Obj = (from t1 in temp1
            join t2 in tmp2 on t1.id equals t2.id
            join nt in NonTempTable on t2.id equals nt.id
            where nt.status == "abcd"
            select t1).First();
 Obj.somecolumn = 1;                     
 Obj.SubmitChanges();

但是我错误地接受了错误

Property or indexer 'AnonymousType#1.ProcedureID' cannot be assigned to -- it is read only

我只有我的应用程序的数据库,我正在尝试使用LINQPad将存储过程转换为LINQ

谁能告诉我如何将上述查询写入Linq?我还需要做什么呢?

3 个答案:

答案 0 :(得分:0)

您必须从tempTable1,tempTable2和NonTempTable创建实体。然后,您应该能够通过Linq处理这些表中的数据。请参阅http://msdn.microsoft.com/en-us/data/ff830362.aspx如何创建模型。

创建后,您可以更新记录或正确记录并保存对数据库的更改

 var result = (from row in model.JoinedTable
         where row.status == "abcd"
         select row).First();
 result.someColumn = "1";
 model.SaveChanges();

答案 1 :(得分:0)

Linq用于查询,而非更新。为了更新数据,您需要选择一个框架(或找出主项目团队正在使用的内容),这个框架旨在实现这一目标 - 实体框架,LinqToSQL或普通的旧ADO.NET({ {1}} + SQlCommand等)。

Linq中没有内置机制来更新内存中的数据,更不用说将更改传播到数据源。即使使用实体框架 - 您也可以使用Linq 获取您想要更新的对象,但实际更新根本不使用Linq,只是属性设置器和您在示例中使用的SqlConnection等方法。

答案 2 :(得分:0)

最后找到了我的上述问题的解决方法,该问题正在关注

var Obj = (from t1 in temp1
        join t2 in tmp2 on t1.id equals t2.id
        join nt in NonTempTable on t2.id equals nt.id
        where nt.status == "abcd"
        select t1).First();

var anatherObj = (from o in Obj
                  select new { o.nonUpdatedColumn1, o.nonUpdatedColumn2, o.nonUpdatedColumn3, o.someColumn = 1});

在“anatherObj”中获得更新的临时表