如何执行实体框架不支持的查询并获取返回的数据
本文关键字:查询 获取 数据 返回 不支持 框架 何执行 执行 实体 | 更新日期: 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…)