Как вызвать хранимую процедуру из linq для сущностей и получить результат в объект - PullRequest
0 голосов
/ 05 марта 2012

У меня есть одна хранимая процедура, которая возвращает строковое значение. Теперь я должен вызвать эту хранимую процедуру из linq для запроса сущности и сохранить ее результат в строковое свойство моего сложного типа. но я получаю следующую ошибку. msgstr "невозможно неявно преобразовать тип объекта result в строку". мой запрос имеет ниже:

using (NeoSoftWindowApp_dbEntities objDatabase = new NeoSoftWindowApp_dbEntities())
{
     ObjectParameter address = new ObjectParameter("Address", typeof(string));
     return (from tbl in objDatabase.COMPs
     select new CompanyReport_ComplexType
     {

    Address=objDatabase.ReturnAddressDetailForCompany(tbl.COMP_ADD1,tbl.COMP_ADD2,
                     tbl.COMP_ADD3, address),
        City = tbl.COMP_CITY,
        CompanyCode = tbl.COMP_NO,
        CompanyName = tbl.COMP_NAME

       }).ToList();
}

в приведенном выше коде ReturnAddressDetailForCompany () - это моя хранимая процедура, которая возвращает объединение все 3 адресных значения. но я получаю ошибку в C

1 Ответ

0 голосов
/ 05 марта 2012

Вы не можете вызвать хранимую процедуру в запросе Linq-to-entity, потому что хранимая процедура не компонуется (ее нельзя использовать внутри оператора SQL select).Вы должны использовать это:

 ObjectParameter address = new ObjectParameter("Address", typeof(string));
 return (from tbl in objDatabase.COMPs.ToList() // Here you change it to Linq-to-Objects
 select new CompanyReport_ComplexType
 {

Address=objDatabase.ReturnAddressDetailForCompany(tbl.COMP_ADD1,tbl.COMP_ADD2,
                 tbl.COMP_ADD3, address).FirstOrDefault(), // Here you must iterate result set from your SP
    City = tbl.COMP_CITY,
    CompanyCode = tbl.COMP_NO,
    CompanyName = tbl.COMP_NAME

 }).ToList();

, но он будет вызывать хранимую процедуру для каждой записи в вашем наборе результатов (= это сделает дополнительный обход базы данных для каждой записи).

...