在asp.net mvc 3中使用LINQ update特定列

Cod*_*iac 1 linq-to-sql asp.net-mvc-3

我有以下代码来更新用户列

 public void UpdateLastModifiedDate(string username)
        {
            using (AppEntities db = new AppEntities())
            {
                var result = from u in db.Users where (u.UserName == username) select u;

                if (result.Count() != 0)
                {
                    var dbuser = result.First();

                    dbuser.LastModifiedDate = DateTime.Now;
                    db.SaveChanges();
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

对于UpdateLastLogOutDate,UpdateLastLoginDate,我有其他两个函数几乎与上面的函数相同.所以,我决定为所有人定义单个函数来更新Last Date,如:

public void UpdateLastDate(string username, string ColumnName);
Run Code Online (Sandbox Code Playgroud)

在这里,我不能像这样放置ColumnName变量:

dbuser.ColumnName = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以使用LINQ来做到这一点

Dar*_*rov 6

您可以像这样定义方法:

public void Update(string username, Action<User> action)
{
    using (AppEntities db = new AppEntities())
    {
        var result = from u in db.Users where (u.UserName == username) select u;

        if (result.Count() != 0)
        {
            var dbuser = result.First();
            action(dbuser);
            db.SaveChanges();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在这种方法可能有不同的用法:

Update("john", user => user.LastModifiedDate = DateTime.Now);                
Update("smith", user => user.UpdateLastLogOutDate = DateTime.Now);
Update("admin", user => 
{
    user.LastModifiedDate = DateTime.Now;
    user.UpdateLastLogOutDate = DateTime.Now;
});
Run Code Online (Sandbox Code Playgroud)

但是如果在编译时不知道表达式,你可以看一下动态LINQ.