Алхамдулилла решен ..
public Array GetTotalResearchByArea()
{
var list = new List<int>();
var all_area = context.Areas.Select(x => x.Id ).ToList();
foreach( var item in all_area)
{
var allReserachCategory = context.ResearchCategories.Where(a => a.AreaId == item).Select(a => a.Id).ToList();
var totalResearchBySingleArea = context.Researchs.Where(c => allReserachCategory.Contains(c.ResearchCategoryId)).Count();
list.Add(totalResearchBySingleArea);
}
return list.ToArray();
}
Проблема с Вашим вопросом состоит в том, что Вы смешиваете OutputStreams и InputStreams. InputStream - что-то, из чего Вы читаете, и OutputStream - что-то, во что Вы пишете.
Это - то, как я пишу объект ПОИ в поток вывода.
// this part is important to let the browser know what you're sending
response.setContentType("application/vnd.ms-excel");
// the next two lines make the report a downloadable file;
// leave this out if you want IE to show the file in the browser window
String fileName = "Blah_Report.xls";
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
// get the workbook from wherever
HSSFWorkbook wb = getWorkbook();
OutputStream out = response.getOutputStream();
try {
wb.write(out);
}
catch (IOException ioe) {
// if this happens there is probably no way to report the error to the user
if (!response.isCommited()) {
response.setContentType("text/html");
// show response text now
}
}
Если бы Вы хотели снова использовать свой существующий код, то необходимо было бы хранить данные ПОИ где-нибудь, затем превращают ЭТО во входной поток. Это было бы легко сделано путем записи этого в ByteArrayOutputStream, затем читая те байты с помощью ByteArrayInputStream, но я не рекомендую это. Ваш существующий метод был бы более полезным как универсальная реализация Канала, где можно передать данные по каналу от InputStream до и OutputStream, но Вам не нужен он для записи объектов ПОИ.
Я думаю, что понимаю то, что Вы пытаетесь сделать (возможно, я недостаточно поднимаюсь, хотя),
Вам действительно не нужно так много кода - проверяют метод записи -
HSSFWorkbook wb = new HSSFWorkBook();
//populate
ServletOutputStream out = response.getOutputStream();
try {
wb.write(out);
out.flush();
}
catch (IOException ioe) {
//whatever
}
out.close();
Насколько я помню, когда я работал w/ПОИ, это - то, что я сделал. Если Вы в веб-платформе, Вам, вероятно, придется обмануть ее так, чтобы платформа не пыталась сделать что-то с, что ServletOutputStream после закрытия ее. Если это попробует, то Вы получите бросок исключения, говоря Вам, что поток вывода уже закрывается.