嘿伙计们我是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?我还需要做什么呢?
答案 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”中获得更新的临时表