如何在linq中使用sql查询更新列数据?

时间:2012-06-25 07:01:07

标签: c# linq predicate

我在sql中有这个查询,它工作正常:

update userinfo set Interest = 0.98 where userid = 313  

我想在linq中这样做,所以我准备了以下内容:

public class TableDataDTO
{
    public string Columnname { get; set; }
    public string Value { get; set; }
    public Type DataType { get; set; }
}  

实施:

TableDataDTO tableData = new TableDataDTO();
tableData.Columnname = "Interest";
tableData.Value = "0.98";

using (dbase instance = new dbase())
{
    string predicate = string.Format("it.UserID=={0} set it.{1}={2}" ,
                313, tableData.Columnname, tableData.Value);

    var uinfo = instance.userinfoes.Where(predicate).FirstOrDefault();

    if (uinfo != null)
    {
        instance.SaveChanges();
        return true;
    }
}  

但它给了我这个错误:

The query syntax is not valid. Near keyword 'SET'  

我将处理不同的列,因此我需要使用linq谓词来最小化代码。 我不喜欢使用任何插件来制作它。希望有人能提供帮助。

修改

我认为我的意思是"How to update data in using Dynamic linq"

Edit2

所以这是真实的情景。用户/客户可以更新他们的信息,例如名字,姓氏,地址,城市......等等,但不能一次性更新信息 那是什么意思呢?好的我可以创建一个可以更新名字的方法,接下来是姓氏,地址等等。但是如果我这样做,它将消耗大量的代码。如果只有linq中的代码可以执行SQL在更新数据时所做的操作,那么我只需要一个获取列名并设置其值的代码。希望我能解释清楚。

编辑3

我已将问题从How to update data in linq using predicates?更改为How to update column data using sql query in linq?,因为我误解了谓词的真正含义。

2 个答案:

答案 0 :(得分:1)

您的谓词应该只是查询的 where 部分(谓词只返回true或false)。试试这个:

instance.userinfoes.Where(user => user.userid == 313).First().Interest = 0.98;

答案 1 :(得分:0)

您可以构建类似于SQL结构的LINQ。通过Where和ForEach的组合,您应该能够更新所需的所有行。即:

    instance.userinfoes.Where(it => it.UserId == 313).ToList()
                       .ForEach(
                           it => it.Interest = 0.98M
                        );

据我所知,没有任何方法可以将类似SQL的查询编写为文本并将它们传递给常规LINQ。

有关更多解决方案,请参阅此问题: Update all objects in a collection using LINQ

相关问题