我正在尝试在我的数据库.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 + "')
最简单的方法是获取实体,设置属性,然后保存更改:
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。
LINQ to SQL/EF 旨在冻结对象并对这些对象进行操作,从而保存更改。它不能替代批处理操作。如果在这种情况下使用 EF/LINQ to SQL,则将向数据库发出 n+1 个请求:1 用于选择要更改的记录,并为要更新的每一行(对象)发出单独的请求。对于小型数据集,这可能是可管理的,但是如果您有任何类型的卷,则使用单个 Update 语句将其保存在存储过程中可能是更好的选择。