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

时间:2012-06-14 11:40:50

标签: sql linq

我正在尝试在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 + "')

2 个答案:

答案 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语句将其保存在存储过程中可能是更好的选择。