1

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

2 回答 2

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。

于 2012-06-14T11:52:38.160 回答
0

LINQ to SQL/EF 旨在水合对象并对其进行操作,从而保存更改。它不打算作为批处理操作的替代品。如果在这种情况下使用 EF/LINQ to SQL,您将向数据库发出 n+1 个请求:1 选择您要更改的记录,并为您正在更新的每一行(对象)发出一个单独的请求。使用小数据集,这可能是可管理的,但如果您有任何类型的卷,使用单个 Update 语句将其保存在存储过程中可能是更好的选择。

于 2012-06-14T12:35:50.887 回答