我在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?
,因为我误解了谓词的真正含义。
答案 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