Вот мой код действия

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 всегда установлено нулевое значение, а значение, установленное в каждом цикле, не меняет значение usageCount. Любая помощь приветствуется заранее.

0
Beginner 20 Окт 2013 в 17:33
Похоже, у вас есть опечатка, item.usageHistory должно быть item.usageCount?
 – 
King King
20 Окт 2013 в 17:36
Это была опечатка. Я редактировал вопрос.
 – 
Beginner
20 Окт 2013 в 17:56

1 ответ

Лучший ответ

Ваша проблема в том, что вы не заметили, что model - это просто запрос . Когда вы в цикле просматриваете model, все меняете, но при возврате вы просто повторно выполняете свой запрос, сохраненный в model. Итак, чтобы исправить это, у вас есть как минимум 2 варианта:

  • Добавьте ToList() после model, и тогда все должно работать:

    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..., и вы должны принять это во внимание, чтобы измените свой код соответствующим образом.

0
King King 20 Окт 2013 в 18:25