在MVC5 Razor View上分组 - 如何将Linq.IGrouping转换为IEnumberable - 我非常接近我可以品尝它

时间:2016-11-17 17:15:43

标签: c# linq asp.net-mvc-4 razor

我正在使用C#MVC5并尝试在我的剃刀页面上按帐号显示分组... This link让我大部分都在那里,但我似乎无法将Link.IGrouping转换为IEnumerable。 ..

我提交了一个加密的查询字符串,它返回了我转换为List<>的XML。然后我尝试将它与Linq分组。我错过了很简单的东西!我想显示“帐号”作为标题,然后在Razor视图中列出该帐号的所有对帐单日期。

我的“ViewModel”(我把XML放到“Doc​​umentViewModel”中,用于Razor中的Display我使用的是“Doc”类(详细信息)和“DocViewModel”(作为标题):

public class DocViewModel
{
    [Display(Name = "Account Number")]
    public string AccountNumber { get; set; }
    public IEnumerable<Doc> DocsList { get; set; }
}
public class Doc
{
    [Display(Name = "Repostitory")]
    public string Repository { get; set; }
    public int DocId { get; set; }
    [Display(Name = "Statement Date")]
    public DateTime DocDate { get; set; }

    [Display(Name = "Account Number")]
    public string AcctNum { get; set; }
    public string FND { get; set; }

}
public class DocumentViewModel
{
    [Display(Name = "Repostitory")]
    public string Repository { get; set; }
    public int DocId { get; set; }
    [Display(Name = "Statement Date")]
    public DateTime DocDate { get; set; }

    [Display(Name = "Account Number")]
    public string AcctNum {get;set;}
    public string FND { get; set; }

}

我的控制器代码:

DocumentViewModel modelDocView = new DocumentViewModel();

string newURL = BNYMManager.BuildEncryptedURLRequest(0, 2016);
List<DocumentViewModel> docs = new List<DocumentViewModel>();
docs = XMLBuild.CreateXML(newURL); //This returns a list sorted by AcctNum and Date
var modelXML = docs;

var modelDocs = docs.GroupBy(t => t.AcctNum).Select(g => new DocViewModel
{
    AccountNumber= g.Key,
    DocsList = g //I get the error here - Cannot implicitily convert IGrouping to IEnumerable (full error below)
});
return View("~/Views/EPresentment/Docs.cshtml", modelDocs);

以下是完整的错误消息:

  

无法隐式转换类型   'System.Linq.IGrouping'到   'System.Collections.Generic.IEnumerable'。   存在显式转换(您是否错过了演员?)

[编辑} 我无法弄清楚如何在视图中显示这个...我确实找到this并且我能够使用以下组来创建我的模型:

var queryAcct =
    from doc in docs
    group doc by doc.AcctNum into AcctGroup
    orderby AcctGroup.Key
    select AcctGroup;

但是现在当我尝试在每个this的视图中显示时,我似乎无法让它工作:

到目前为止,这是我的观看代码:

@foreach(模型中的var AccountGroup)                 {                     @ AccountGroup.AcctNum                     foreach(AccountGroup中的var项)                     {                      @ item.DocDate                     }                 }

这只是不起作用!

1 个答案:

答案 0 :(得分:0)

问题在于在初始化程序中设置DocList属性。它显然是IEnumerable<T>,而g在此输入,或者您选择的GroupedEnumerable中的单个项目是IGrouping<TKey, TValue>。你需要这样的东西:

var modelDocs = docs.GroupBy(t => t.AcctNum).Select(g => new DocViewModel
{
    AccountNumber= g.Key,
    DocsList = g.ToList()
});