我正在尝试在Database.cs文件中编写linq查询。我觉得很难。有没有工具将sql转换为linq?我试过linqer,但这并不好。或者你能帮我写一下linq中的以下查询吗?
update table
set field1='R',
field2='" + DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss") + "',
field3 = '" + util.CleanStringInput(value1) + "'
where field1 = 'P'
and field3 = '" + value2 + "'
and field4 = (select max(field5)
from table2
where field6='" + value2 + "')
答案 0 :(得分:1)
最简单的方法是获取实体,设置属性然后保存更改:
var maxFromTable2 = context.YourTables2.
Where(t2 => t2.field6 == value2).
Max(t2 => t2.field5);
var entitiesToUpdate = context.YourTables.
Where(t => t.field1 == "P" &&
t.field3 == value2 &&
t.field4 == maxFromTable2).
ToList();
foreach (var entityToUpdate in entitiesToUpdate)
{
entityToUpdate.field1 = "R";
entityToUpdate.field2 = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss");
}
context.SaveChanges();
注意:从您的问题中不清楚您正在更新哪个表,因此我默认假设它是一个与table2
不同的表。如果您指明是使用LINQ to SQL还是实体框架(LINQ to Entitites),它可能会有所帮助。当前语法适用于EF。
答案 1 :(得分:0)
LINQ to SQL / EF旨在保护对象并对其进行操作,从而保存更改。它不能用作批处理操作的替代品。如果在这种情况下使用EF / LINQ to SQL,则将向数据库发出n + 1个请求:1选择要更改的记录,并为要更新的每个行(对象)单独请求。使用小数据集时,这可能是可管理的,但如果您有任何类型的卷,使用单个Update语句将其保存在存储过程中可能是更好的选择。