0

我想获取存储过程返回的特定列的列表。在结果集中,两个列名是通用的,一个列名是动态的。

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 列在输出中每次都相同,但根据输入参数,第三列名称会有所不同。

我正在使用 Entity Framework Core LINQ 在 C# 中编写以下代码

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 。但是两者都失败并出现以下错误

“FromSql”操作的结果中不存在所需的列“ESText”

其中 ESText 指的是我不是从存储过程返回但存在于表中的列。

我只想在 c# 的结果集中存储几列而不是全部。

任何机构都可以帮助我吗?

注意:它适用于Select * from LanguageTranslation查询

4

1 回答 1

0

看看如何执行原始查询。 https://docs.microsoft.com/en-us/ef/core/querying/raw-sql

您可以编写查询以将结果临时存储在临时表中,然后从该表中进行选择。

FromSql 为您的注入使用更多参数,您将希望使用这些额外参数将您的参数放入查询中。不要字符串连接。

另一个注意事项:当您使用 ToList 或 ToArray 或 Count 时,您将在服务器上执行查询。

于 2019-01-23T15:48:56.697 回答