4

我在 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"

编辑2

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

编辑3

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

4

2 回答 2

1

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

instance.userinfoes.Where(user => user.userid == 313).First().Interest = 0.98;
于 2012-06-25T07:07:43.320 回答
0

您可以像构建 SQL 一样构建 LINQ。通过 Where 和 ForEach 的组合,您应该能够更新您需要的所有行。IE:

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

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

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

于 2012-06-25T07:29:37.470 回答