如何执行实体框架不支持的查询并获取返回的数据

本文关键字:查询 获取 数据 返回 不支持 框架 何执行 执行 实体 | 更新日期: 2023-09-27 18:15:53

我使用VS2010, c#, . net Framework 4,(数据库提供商Microsoft SQL Server 2008 R2),为Excel编写一个插件。其主要思想是让用户对DB执行预定义的查询,以便将数据拉入Excel。

假设我有硬编码的查询存储在数据库中的表[queries]中。所以我可以使用实体框架来获取表查询。表中列出的这些查询可以返回从单个值到多个记录的任何值。

我对实体框架相当无知。现在,我已经了解到可以直接对数据库执行T-SQL。这是有用的,但我努力得到的结果回来。

using (SYMNHM_DEVEntities dataContext = new SYMNHM_DEVEntities())
        {
            var query = "Select [Query Name] from [SYM XLS Queries] where [Query ID] = 2";
            str = dataContext.ExecuteStoreCommand(query) + "";
        }

这将给出-1的结果,然后将其粗略地制成一个字符串。好吧,我知道这不是很好的编码,但就把它当作一个例子。我如何得到实际的[查询名称]返回?

在这种情况下,它只是一个单一的值,但如果查询将返回更多的值(我甚至可能不知道它是否是字符串),我如何创建一个适当的返回类型?

如何执行实体框架不支持的查询并获取返回的数据

下面是关于字符串的简单示例的答案:

using (MyEntities dataContext = new MyEntities())
    {
      var query = (from q in dataContext.Queries
                     where q.Query_Name == queryName
                     select q.Query).Single();

      queryResults = dataContext.ExecuteStoreQuery<string>(query);
      List<string> list = new List<string>(queryResults.ToArray<string>());
      return list; }

我还没有一个用其他东西代替字符串类型的解决方案,尽管我正在研究如果查询将有多个字符串结果返回Datatable的问题。

直接使用SQL命令不是一个好习惯,为什么不使用LINQ ?在您的示例中,您可以使用:

var result = (from q in dataContext.SYMXLSQueries
             where q.ID == 2
             select q.QueryName).ToArray();

返回一个字符串数组(如果QueryName是一个varchar…)