【问题标题】:Changing field value after querying does not take effect查询后更改字段值不生效
【发布时间】:2013-10-28 23:13:19
【问题描述】:

这是我的操作代码

public class personnelViewModel{
    public Guid PKPersonelID { get; set; }
    public string name { get; set; }
    public string family { get; set; }
    public int usageCount { get; set; }
}

var model = from personnel in DB.RFH_Personnel select new personnelViewModel 
                                                        { 
                                                            PKPersonelID = personnel.PKPersonelID,
                                                            name = personnel.Name,
                                                            family = personel.Family 
                                                        }
freach(var item in model)
    item.usageCount = DB.RFH_Service.Count(d => d.FKPersonelID == item.PKPersonelID);

return View(model);

这是我的观点:

@model IEnumerable<RefahiWeb.Models.personnelViewModel>
@{    
    var grid = new WebGrid(source: Model, rowsPerPage: 15, canPage: true, canSort: true);
}

@grid.GetHtml(tableStyle: "table tablesorter table-bordered table-hover request-status",                    
                mode: WebGridPagerModes.All,
                columns: grid.Columns(
                        grid.Column("name", "name", canSort: false),                         
                        grid.Column("family", "family", canSort: false),     
                        grid.Column("usageCount", "usageCount", canSort: false)
                )
        )

问题是usageCount 总是设置为零,并且在froeach 循环中设置的值不会改变usageCount 的值。提前感谢任何帮助。

【问题讨论】:

  • 您好像有错别字,item.usageHistory 应该是 item.usageCount
  • 输入错误。我编辑了问题。

标签: c# linq entity-framework linq-to-entities entity-framework-5


【解决方案1】:

您的问题是您没有注意到model 只是一个查询。当您遍历model 时,更改所有内容,但返回时,您只需重新执行model 存储的查询。因此,要解决此问题,您至少有 2 个选择:

  • model 之后附加ToList(),然后一切正常:

    var model = from personnel in DB.RFH_Personnel 
                select new personnelViewModel  { 
                                                PKPersonelID = personnel.PKPersonelID,
                                                name = personnel.Name,
                                                family = personel.Family 
                                               }.ToList();
    
  • 像这样在查询中分配usageCount

    var model = from personnel in DB.RFH_Personnel 
                select new personnelViewModel  { 
                                                PKPersonelID = personnel.PKPersonelID,
                                                name = personnel.Name,
                                                family = personel.Family, 
                                                usageCount = DB.RFH_Service.Count(d => d.FKPersonelID == personnel.PKPersonelID)
                                               };
    

注意:我不知道您的 View 方法接受什么,但是当您附加 ToList() 您的模型将是 List... 并且您应该考虑到这一点来修改您的代码相应地。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2020-03-26
    • 2011-04-05
    • 2023-01-18
    相关资源
    最近更新 更多