Как получить определенные столбцы, возвращаемые хранимой процедурой в переменную / список, используя Entity Framework Core
Я хочу получить список определенных столбцов, возвращаемых хранимой процедурой. В результирующем наборе два имени столбцов будут общими, а одно имя столбца будет динамическим.
ALTER PROC DBO.GETLANGUAGETRANSLATION(@LANGCODE VARCHAR(10))
AS
BEGIN
DECLARE @QUERY NVARCHAR(255)
SET @QUERY= N'SELECT RESOURCENAME,ENText,'+UPPER(@LANGCODE)+' INTO #TEMP FROM DBO.LANGUAGETRANSLATION SELECT * FROM #TEMP';
EXEC(@QUERY);
END
Столбцы RESOURCENAME и ENText будут выводиться каждый раз одинаково, но в зависимости от входного параметра имя третьего столбца будет различаться.
Я пишу код ниже в C#, используя Entity Framework Core LINQ
public async Task<IEnumerable<LanguageTranslation>> GetAsync(string langCode)
{
var context = new LQMSDbContext(AppConstants.DB_CONNECTION_STRING_KEY);
try
{
string query = "GetLanguageTranslation '" + langCode + "'";
var result = context.LanguageTranslation.FromSql(query).ToList();
var result1 = context.Database.ExecuteSqlCommand("GETLANGUAGETRANSLATION @p0", parameters: langCode );
}
catch(Exception ex)
{
string a = ex.Message;
}
return await _dbSet
.Where(x => x.Equals(langCode))
.ToListAsync();
}
Я пытаюсь вызвать хранимую процедуру GETLANGUAGETRANSLATION, используя два разных подхода. Но оба терпят неудачу с ошибкой ниже
Обязательный столбец ESText не присутствовал в результатах операции FromSql
Где ESText относится к столбцу, который я не возвращаю из хранимой процедуры, но присутствует в таблице.
Я хочу хранить только несколько столбцов в наборе результатов в C# и не все.
Может ли кто-нибудь помочь мне в этом?
ПРИМЕЧАНИЕ: он отлично работает с Select * from LanguageTranslation
запрос
1 ответ
Посмотрите, как выполнять необработанные запросы. https://docs.microsoft.com/en-us/ef/core/querying/raw-sql
Вы можете написать запрос для временного сохранения результатов во временной таблице, а затем выбрать из этой таблицы.
FromSql принимает больше параметров для вашей инъекции, вы захотите использовать эти дополнительные параметры, чтобы поместить свои в запрос. Не объединяйте строки.
Еще одно примечание: когда вы используете ToList или ToArray или Count, вы будете выполнять запрос на сервере.