IQueryable 在 foreach 循环中更改未显示在视图中

IQueryable changed in foreach loop not displaying in view

我一直在尝试更改 RouteAttr.RoutedForRole 的值,如果它等于 SHead 但我检查了 运行 时间并且 query 没有改变,即使它进入了 foreach 循环并且有有效的条目。我还尝试在视图中添加 foreach 循环,但它没有改变任何东西。

public ViewResult Index()
{
    IQueryable<ServiceRequestViewModel> query;
    query = from c in context.ServiceRequests
            select new ServiceRequestViewModel
            {
                ServiceRequestId = c.ServiceRequestId,
                ServiceDescription = c.ServiceDescription,
                RequestNumber = c.RequestNumber,
                Title = c.Title,
                RouteAttr = c.RouteAttr,
                LogAttr = c.LogAttr
            };

    foreach (var item in query)
    {
        if (item.RouteAttr.RoutedForRole == WorkflowRole.SHead)
        {
            item.RouteAttr.RoutedForRole = WorkflowRole.HRManager;
        }
    }
    return View(query);
}

下面是我的网格视图。

@Html.Grid(Model).Columns(col =>
{
    col.Add(o => o.ServiceRequestId)
        .Encoded(false)
        .Sanitized(false)
        .Filterable(true)
        .Titled("SRF No.")
        .SetWidth(150)
        .RenderValueAs(o => Html.ActionLink(o.RequestNumber, "Details", new { id = o.ServiceRequestId }));
    col.Add(o => o.Title)
        .Filterable(true)
        .SetWidth(400)
        .Titled("Title");
    col.Add(o => o.LogAttr.CreatedBy)
        .Filterable(true)
        .Titled("Requestor");
    col.Add(o => o.RouteAttr.RoutedForRole)
            .Filterable(true)
            .Titled("Status");
}).WithPaging(10).Sortable(true)

我在评论中被告知为什么它没有 returning 所以现在我想知道如何更新 iqueryable 和 return 中的项目。

就像@Enigmativity评论里说的,我把query改成了数组

var data = query.ToArray();

他建议我 return data 但它没有用,因为 ServiceRequestViewModel 需要 IQueryable 类型。所以我把它改回 IQueryable 类型,这样我就可以 return 查看它。

var queryable = data.AsQueryable();