c# - 从字符串访问 IQueryable 对象成员?

标签 c# asp.net-mvc iqueryable

我想制作一个仅以一种有意义的方式更改的函数模板。我当前正在创建单独的 ActionResult 来更改 MVC 应用程序中的用户设置。有很多选项,我厌倦了为每个复选框编写一个新的 ActionResult 方法,因此我需要一些关于如何访问和设置值的指导,而我没有使用点符号显式设置对象成员。

这是当前复选框 ActionResult 的示例:

public ActionResult ChangeActivityShowNewProduct(bool value)
{
    var _id = Convert.ToInt32(Session["ID"]);
    var dataContext = new SecurityDataContext();
    var x = from c in dataContext.UserSettings
            where c.UserID == _id
            select c;

    foreach (var setting in x)
    {
        setting.ActivityShowNewProduct = value;
    }

    dataContext.SubmitChanges();

    Session["ActivityShowNewProduct"] = value;

    return Json(Session["ActivityShowNewProduct"], JsonRequestBehavior.AllowGet);
}

另一个示例非常相似,但可能称为“ChangeActivityShowNewUser”,其中底层代码的唯一区别在于 foreach 循环具有 setting.ActivityShowNewUser (以及 session 变量,但我不担心分配这些)。

是否可以用字符串设置setting的成员?也许是在 foreach 循环之外?我还不太熟悉 IQueryable 对象,所以我不太确定从哪里开始寻找。任何引用资料将不胜感激!

更新


我们开始吧。它有效,但有点重复,我正在努力。为他人发帖和/或批评。谢谢大家。

Func<int, bool, Action<UserSetting>, bool> CheckBoxChanger = (i, b, v) =>
{
    var _id = i;

    var dataContext = new SecurityDataContext();
    var x = from c in dataContext.UserSettings
            where c.UserID == _id
            select c;

    foreach (var setting in x)
    {
        v(setting);
    }

    dataContext.SubmitChanges();

    return b;
};

public ActionResult CheckBoxSettingChange(Action<UserSetting> valueSetter, bool result, string SessionName)
{
    Session[SessionName] = CheckBoxChanger(Convert.ToInt32(Session["ID"]), result, valueSetter);

    return Json(Session[SessionName], JsonRequestBehavior.AllowGet);
}

public void DoIt(string name, bool val)
{
    switch (name)
    {
        case "ChangeActivityShowNewProduct":
            CheckBoxSettingChange(setting => setting.ActivityShowNewProduct = val, val, name);
            break;

        // ... etc etc etc
    }
}

最佳答案

当您执行 foreach 循环时,它不再只是一个查询;而是一个查询。它已经具体化为结果。

您可以让此方法接受一个接受该项目并设置该值的方法。然后您可以在每个项目上调用该方法:

public ActionResult ChangeActivityShowNewProduct(Action<UserSetting> valueSetter)
{
    //...
    foreach (var setting in x)
        valueSetter(setting);
    //...
}

然后调用它你会得到类似的东西:

ChangeActivityShowNewProduct(setting => setting.ActivityShowNewProduct = false);

关于c# - 从字符串访问 IQueryable 对象成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19797672/

相关文章:

C#获取焦点所在的Windows资源管理器路径

c# - 如何在 ASP.NET MVC 2.0 中对多个属性进行自定义验证?

javascript - 如何删除发布版本中的 console.log 行?

c# - 没有类型为 'IEnumerable<SelectListItem>' 的 ViewData 项具有键specialityId'。'。

c# - 如何使用存储库模式在事务中保留 IQueryable<>?

c# - 从 CSV 文件中读取数据

c# - 如何创建一个继承自另一个类并在 CodeDom 中传递类型参数的类?

c# - 解决 LINQ to Entities 无法识别该方法的方法?

c# - 我需要确认我对 IQueryable 和 IEnumerable 的理解

c# - 我可以使用关键字 "in"以某种方式分隔方法声明中的参数吗?