小编vfa*_*bre的帖子

为什么除非添加 ToList(),否则 foreach 中对 Linq 分组选择所做的更改会被忽略?

我有以下方法。

public IEnumerable<Item> ChangeValueIEnumerable()
    {
        var items = new List<Item>(){
            new Item("Item1", 1),
            new Item("Item2", 1),
            new Item("Item3", 2),
            new Item("Item4", 2),
            new Item("Item5", 3)
        };

        var groupedItems = items.GroupBy(i => i.Value)
            .Select(x => new Item(x.First().Name, x.Key));

        foreach (var item in groupedItems)
        {
            item.CalculatedValue = item.Name + item.Value;
        }

        return groupedItems;
    }
Run Code Online (Sandbox Code Playgroud)

groupedItems集合中CalculatedValue,s 为空。但是,如果我在 s 具有值之后添加 a到句子ToList()中。例如:SelectGroupByCalculatedValue

 var groupedItems = items.GroupBy(i => i.Value)
            .Select(x => new Item(x.First().Name, x.Key)).ToList();
Run Code Online (Sandbox Code Playgroud)

所以,问题是。为什么是这样?我想知道这样做的原因,对我来说解决方案是添加一个ToList()

更新:类的定义 …

c# linq linq-group

6
推荐指数
1
解决办法
324
查看次数

aspnet vNext ActionFilter和TempData

我正在尝试在aspnet vNext中创建一个ActionFilter.在此过滤器中,我想访问TempData和ViewData(在以前版本的Controller中都可用).我重写该方法 public override void OnActionExecuting(ActionExecutingContext filterContext)

进入filterContext我有控制器但是是一个object而不是ControllerBase.我原以为是ControllerBase因为在以前版本的MVC中ControllerContext(基类ActionExecutingContext)是a ControllerBase,这里是codeplex中的源代码.我知道这可能是因为POCO控制器.

所以,问题是,如果控制器是一个对象,如何访问TempData和ViewData.简单地做一个向下转换(类似这样(Controller)filterContext.Controller)或者有一个最好的方法来做到这一点.

更新

如果在本博客文章中解释它,但是使用aspnet 5,我想实现.

c# asp.net-mvc asp.net-core

5
推荐指数
1
解决办法
1906
查看次数

标签 统计

c# ×2

asp.net-core ×1

asp.net-mvc ×1

linq ×1

linq-group ×1