【问题标题】:Selecting single items from MVC enumerable models从 MVC 可枚举模型中选择单个项目
【发布时间】:2011-04-19 01:51:20
【问题描述】:

当使用一个使用 IEnumerable 的 MVC 3 集合时,有没有办法让小型查询能够找到单个值?我一直在尝试,但收效甚微。

我有一组包含描述和设置的设置。问题是暴露其中一个,因为每个都是独一无二的。我尝试过这样的事情:

var appl = _service.GetSettings(id, app); //Call to service layer & repository
appl.Select(a => a.setting_value.Where(a.setting_name.StartsWith("Login")));

收效甚微(除非我遗漏了什么)。是否可以从可枚举集合中选择一项并将其传递给 ViewBag 或 ViewData 对象?我想做的是如下所示:

var appl = _service.GetSettings(id, app); //Call to service layer & repository
ViewBag.Login = appl.Select(a => a.setting_value.Where(a.setting_name.StartsWith("Login")));

并将其传递给视图,因为我现在有一个视图,它现在将集合与单个值组合在一起。

以下似乎在视图中起作用:

Application Name @Html.TextBox("application_name", @Model.FirstOrDefault().app_name)

但我不确定这是否违反了关注点分离。我在这里走错路了吗?谢谢!

编辑:这是我需要的。下面的答案让我非常接近+1 +1

ViewBag.Login = appl.Where(a => a.setting_name.StartsWith("Login")).FirstOrDefault().setting_value

【问题讨论】:

    标签: asp.net-mvc-3 razor html-helper


    【解决方案1】:
    ViewBag.Login = appl.Select(a => a.setting_value.Where(a.setting_name.StartsWith("Login"))).FirstOrDefault();
    

    这将选择第一个符合您条件的对象并返回单个结果或 null

    【讨论】:

    • 感谢您的快速回答,但是当我将其插入我的代码时,我收到 2 个编译错误:1. 'string' 不包含 'Where' 的定义和最佳扩展方法重载'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable, System.Func)' 有一些无效参数。” 2. 无法从 'bool' 转换为 'System .Func'。此外,Select 和 Where 下方都有红线 - 都告诉我“明确指定类型参数”。
    【解决方案2】:
    var appl = _service.GetSettings(id, app);
    ViewBag.Login = appl
        .Where(a => a.setting_name.StartsWith("Login"))
        .FirstOrDefault();
    

    【讨论】:

    • 太好了……它没有给我任何错误,但它只在视图上返回我的类名……我确定我做错了什么。我尝试了其他运算符,例如“Equals”,但我只得到了类名。嗯。不过谢谢!
    • 好的,我需要的是多一个点。这正是我想要的: ViewBag.Login = appl.Where(a => a.setting_name.StartsWith("Login")).FirstOrDefault().setting_value;对不起,如果我不清楚。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多