Я разрабатываю веб-api, используя Entity Framework 6. Мне нужно выполнить сложный SQL-запрос, который получает данные из нескольких таблиц, как показано в коде. Я пробовал, но получаю следующую ошибку:Выполнение сложного необработанного SQL-запроса в EF6
The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types.
Запрос успешно возвращает данные в SSMS Query Analyzer.
[HttpGet]
public IHttpActionResult getJobNo(string cmpCode, string branchCode)
{
string query = string.Format(
@"select
M.S1, M.S2, C.S2 As S30, M.S3, SC.S2 As S31, M.D1, M.S5,
JT.S2 As S32, M.S6, TM.S2 As S33, M.S10
from
MERTRM M, CMF C, CMFS SC, PMCD JT, PMCD TM
where
M.S100 = 'JOB' and M.S102 = '{0}' and
M.S108 = '{1}' and
M.S101 not in('U', 'C', 'F') and
M.S2 = C.S1 and C.S102 = '{0}' and
C.S100 = 'CC' and M.S3 = SC.S1 and SC.S102 = '{0}' and
C.S1 = SC.S109 and M.S5 = JT.S1 and JT.S102 = '{0}' and
JT.S100 = 'JTP' and M.S6 = TM.S1 and TM.S102 = '{0}' and
TM.S100 = 'TPM'",
cmpCode,branchCode);
var result = db.Database.SqlQuery<string>(query);
return Json(result.ToArray());
}
Поскольку запрос возвращает список записей, поэтому, когда я попытался следующим образом:
var result = db.Database.SqlQuery<IEnumerable<string>>(query).ToList();
Он дал мне следующую ошибку:
'System.Collections.Generic.IEnumerable`1[System.String]' may not be abstract and must include a default constructor.
Как я могу выполнить этот запрос?
С уважением!
либо используйте SelectMany(), либо измените тип возвращаемого значения на класс нескольких строк. – DevilSuichiro
В чем проблема с 'var result = db.Database.SqlQuery (query) .ToList();'. Параметр указывает тип строк, а не тип набора. –
tschmit007
@ tschmit007, Он дает ту же ошибку: «У читателя данных больше одного поля .............» –