【问题标题】:IQueryable changed in foreach loop not displaying in viewIQueryable 在 foreach 循环中更改未显示在视图中
【发布时间】:2018-10-10 04:29:47
【问题描述】:

我一直在尝试更改 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)

我在 cmets 中被告知为什么它没有返回,所以现在我想知道如何更新 iqueryable 中的项目并将其返回到视图中。

【问题讨论】:

  • 我猜你正在查询一个数据库,并将结果带入内存,在内存中执行更新,但不将其保存回数据库。当您返回查询时,将对数据库重新执行查询。您只是丢弃了您在循环中所做的更改。
  • 我不想更改数据库中的数据。我只希望显示在视图中改变。
  • 然后执行var data = query.ToArray();,更改data 中的数据,然后更改return View(data);
  • @Enigmativity ServiceRequestViewModel 需要 System.Linq.IQueryable

标签: asp.net-mvc linq gridview foreach iqueryable


【解决方案1】:

就像@Enigmativity在cmets中所说的那样,我将查询更改为数组。

var data = query.ToArray();

他建议我返回data,但它不起作用,因为ServiceRequestViewModel 需要IQueryable 类型。所以我把它改回IQueryable类型,这样我就可以返回查看了。

var queryable = data.AsQueryable();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 2016-06-24
    • 2013-07-14
    • 2011-12-07
    相关资源
    最近更新 更多