Экспорт в Excel с помощью Predicate Builder
Я исследую и пытаюсь найти способ экспортировать определенные данные в таблицу Excel.
Сайты, которые я нашел, похожи на эти, где они возвращают каждую запись в базе данных.
В моем веб-приложении у меня есть представление, которое возвращает все записи в базе данных, но я также использую Predicate Builder
так что пользователь может сортировать записи на основе их конкретных параметров. У пользователя, который будет использовать это приложение, будет 0 использовать / интерес для экспорта каждой записи в Excel.
Итак, мой вопрос: как мне объединить параметры (предикат) с методом, который экспортирует в excel?
У меня нет кода для показа, потому что я не нашел ни одного примера в своем исследовании, чтобы дать мне основу для сочетания параметров с экспортом в Excel.
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})
Надеюсь, это поможет вам.