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