将 Sql 查询(更新表集 ..) 转换为 linq ( var m = ..)



我正在尝试在我的数据库.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 语句将其保存在存储过程中可能是更好的选择。

最新更新