Retrieve/Update EF 实体使用列的字符串表示形式 - 代码优先

Retrieve/Update EF Entity using string representation of column - code first

更新:我试图在不知道列的情况下更新 EF 实体,直到 运行 时间。所以我希望我的前端 post 到我的 api 有一个列名和它的值,然后让我的 api 通过以下方式更新数据库:

所以在我的 webapi 控制器中给出以下数据:

string colName = 'firstName';
string colValue = 'Sam';

在我的 EF 数据检索中,而不是

var user = db.Users.Where(x => x.firstName == colValue);  //firstName is actual column name

我可以做类似的事情吗

var user = db.Users.Where(x => x.'colName' == x.colValue);  //colName is the string representation of column

并以某种方式更新此给定列,例如:

user.colName = colValue;  //where colName = 'firstName'

而不是

user.firstName = colValue;

我对反射进行了相当多的研究,但我不确定从哪里开始,或者这样的任务是否可行。

我可以像这样使用循环来检索类似的数据:

foreach(var x in User.GetType().GetProperties()) {
if(x.ToString() == colName)
{
var y = db.User.Where(z => z.firstName == colValue)
}}

如有任何指点、建议或意见,我们将不胜感激! 这不可能吗?

抱歉,问题看错了,这里是更新后的答案。您需要使用:

var e = db.Entry(new User() {Id =1, Name = "test"});
var property = e.CurrentValues.PropertyNames.FirstOrDefault(p => p == colName);
e.CurrentValues[property] = colValue;