繁体   English   中英

如何使用Entity Framework Core获取变量/列表中存储过程返回的特定列

[英]How to get specific columns returned by stored procedure in variable/list using 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列的每次输出将相同,但基于输入参数的第三列名称将有所不同。

我正在使用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查询中的Select * from LanguageTranslation一起使用

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

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

FromSql需要更多的参数来进行注入,您将需要使用这些额外的参数将其放入查询中。 不要串接。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM