使用Predicate Builder导出到Excel

时间:2016-05-09 14:30:55

标签: c# asp.net-mvc-5 export-to-excel

我正在研究并尝试找到将特定数据导出到Excel电子表格的方法。

我找到的网站与this类似,它们返回数据库中的每条记录。

在我的Web应用程序中,我有一个View确实返回数据库中的所有记录,但我也使用Predicate Builder,以便用户可以根据其特定参数对记录进行排序。将使用此应用程序的用户将使用0 /兴趣将每个记录导出为ex​​cel。

所以,我的问题是如何将参数(谓词)与导出到excel的方法结合起来?

我没有任何代码可以显示,因为我在研究中没有找到任何示例,为我提供了如何将参数与导出组合到excel的基础。

1 个答案:

答案 0 :(得分:1)

我的代码中没有使用PredicateBuilder,但我使用它做了一个例子。也许你必须适应一些事情。

    public ActionResult Export(string PatientName, string BirthDate, string Gender, string PatientType)
    {
        ViewBag.PatientName = PatientName ?? "";
        ViewBag.BirthDate = BirthDate ?? "";
        ViewBag.Gender = Gender ?? "";
        ViewBag.PatientType = PatientType ?? "";

        var predicate = PredicateBuilder.True<Patient>();

        if (!string.IsNullOrEmpty(PatientName))
        {
            predicate = predicate.And(i => i.FirstName.ToLower().StartsWith(PatientName) || i.LastName.ToLower().StartsWith(PatientName));
        }

        if (!string.IsNullOrEmpty(Gender))
        {
            int gender;
            Int32.TryParse(Gender, out gender);
            predicate = predicate.And(i => i.Gender == gender);
        }
        if (!string.IsNullOrEmpty(PatientType))
        {
            int type;
            Int32.TryParse(PatientType, out type);
            predicate = predicate.And(i => i.PatientType == type);
        }

        if (!string.IsNullOrEmpty(BirthDate))
        {
            DateTime dob;
            DateTime.TryParse(BirthDate, out dob);
            predicate = predicate.And(i => EntityFunctions.TruncateTime(i.BirthDate) == EntityFunctions.TruncateTime(dob));
        }

        var patients = db.Patients.Where(predicate).Select(i => i).Include(p => p.DropDownOption).Include(p => p.DropDownOption1);

        GridView gv = new GridView();
        gv.DataSource = patients.ToList();
        gv.DataBind();
        Response.ClearContent();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment; filename=IbiliPasswords.xls");
        Response.ContentType = "application/ms-excel";
        Response.Charset = "";
        StringWriter sw = new StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        gv.RenderControl(htw);
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();

        return RedirectToAction("Index");
    }

Index.cshtml:

@Html.ActionLink("Export Info", "Export", new { PatientName = ViewBag.PatientName, BirthDate= ViewBag.BirthDate, Gender= ViewBag.Gender, PatientType= ViewBag.PatientType})

希望它对你有所帮助。