0

下面是我在 ASP MVC 3 控制器中用于导出到.xls文件的两表 linq 查询。但是,我正在查询的表与辅助表具有一对多的关系。FixedStats当我单步执行代码时,我可以看到 linq 查询已按应有的方式执行, andVariableStats字段中的信息量正确。但是,当文件导出到电子表格时,这两列就找不到了。

    public void ExportToCsv()
    {

        var grid = new System.Web.UI.WebControls.GridView();

        //join a in db.BankListAgentId on b.ID equals a.BankID
        var banks = from b in db.BankListMaster

                          where b.Status.Equals("A")
                          select new
                          {
                              BankName = b.BankName,
                              EPURL = b.EPURL.Trim(),
                              AssociatedTPMBD = b.AssociatedTPMBD,
                              Tier = b.Tier,
                              FixedStats = from a in db.BankListAgentId
                                           where a.BankID == b.ID &&
                                                 a.FixedOrVariable.Equals("F")
                                               select new { a.AgentId },
                              VariableStats = from a in db.BankListAgentId
                                              where a.BankID == b.ID &&
                                                    a.FixedOrVariable.Equals("V")
                                              select new { a.AgentId }, 
                               Attachment = b.Attachment,
                              Status = b.Status
                          };

        grid.DataSource = banks.ToList();
        grid.DataBind();

        Response.ClearContent();
        Response.AddHeader("content-disposition", "attachment; filename=BankList.xls");
        Response.ContentType = "application/excel";
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        grid.RenderControl(htw);
        Response.Write(sw.ToString());
        Response.End();
    }
4

1 回答 1

1

您可以使用String.JoinAgentId值列表组合成一个字符串,然后将其提供给网格。目前FixedStatsVariableStats是列表,不能以网格单元格值的形式呈现:

  select new
  {
      FixedStats = String.Join("|", from a in db.BankListAgentId
                   where a.BankID == b.ID &&
                         a.FixedOrVariable.Equals("F")
                       select a.AgentId.ToString()),
  }

正如 Moby 的 Stunt Double 所注意到的,建议创建专用的视图模型。由于 ORM<->SQL 转换问题,上述解决方案可能不起作用。

专用 ViewModel 示例:

public class ExportVM
{
    public List<int> FixedStats { get; set; }
    public FixedStatsCombined 
    {
        get
        {
             return String.Join("|", FixedStats.Select(item => item.ToString());
        }
    }
}
于 2013-04-17T21:35:26.750 回答