2013-04-04 91 views
1

嘿,我是Linq的新手,我试图转换存储过程。但我有一个很难在SP编写更新查询在LINQ我的查询像在Linq的临时表上更新查询

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(); 

写了上述查询的以下转换,但我gettimg以下错误

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

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

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

+0

SUMIT得到了更新的临时表:*不*以发布更多创造更多的帐户这个问题的重复。 – 2013-04-08 13:51:10

+1

_I我试图将存储过程转换为LINQ._为什么? – sgmoore 2013-04-08 16:38:35

回答

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”

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(); 
+0

感谢您提供如此快速的回应,但我们并未使用实体Framwork,我们正在使用LinkPad编写LINQ querries。你能告诉我,我怎么能写上面querry没有使用实体框架 – 2013-04-05 11:04:19

+0

@sumitjoshi那么,你不能。如果你不使用linq到实体,你的客户端和数据库中的数据没有连接。在这种情况下,只能使用LINQ to Objects来与客户端上的数据一起操作,但这些更改不会影响服务器端。 – Alex 2013-04-05 11:25:37

+0

再次感谢,但我只是想问你,我试图将所有存储过程转换为LINQ,而我没有应用程序代码,只是我尝试使用LINQ进行转换的数据库,我可以这样做,而有只是数据库没有应用程序代码?如果你能帮我解决这个问题,那将会很棒 – 2013-04-08 11:34:15

0

的LINQ是查询,不更新。为了更新数据您需要选择一个框架(或找出主要项目团队正在使用的),以便实现这一目标 - 实体框架,LinqToSQL或普通旧ADO.NET(SQlCommand + SqlConnection等)。 )。

Linq内部没有内置机制来更新内存中的数据,更不用说将更改传播到数据源。即使使用实体框架 - 你可以可以使用Linq到得到你想要更新的对象,但实际的更新根本不使用Linq,只是属性设置器和方法如SaveChanges()你在你的例子中。

+0

谢谢,您能否告诉我是否有另一种方法来完成逻辑。我正在寻找一种逻辑转换,而不是转化为sp所采取的确切步骤。数据需要在最后正确,但确切的步骤不需要复制。 – 2013-04-08 15:20:32

+0

你拥有的逻辑很好 - 基于你得到的错误没有粘贴确切的代码(或者它发生在不同的地方),因为你没有创建任何匿名类型。 – 2013-04-08 15:24:29