如何在Entity Framework中编写动态SQL查询?

时间:2016-09-22 11:29:49

标签: sql entity-framework

我有一个页面,用户可以在其中输入SQL查询。此查询可以针对我的数据库中的任何表。我需要对相应的表执行此查询并在我的视图中显示结果。怎么做?

例如:用户可以输入Select * from ABCselect max(price) from items

我试过了:

var results = DbContext.Database.SqlQuery<string>(query).ToList();

但这会引发错误:

  

数据阅读器有多个字段。多个字段无效   对于EDM原语或枚举类型。

无论结果如何,我都应该将其传递给视图并显示它。

请帮忙。

2 个答案:

答案 0 :(得分:0)

你可以使用

 SqlQuery<dynamic>" 

这将解决错误,但您只能获得返回结果的计数。因此,您只需验证查询是否已返回一些数据。但仍需要知道返回数据的类型。

存在向用户提供向数据库输入查询的风险。

答案 1 :(得分:0)

错误消息准确说明了问题:

  

数据阅读器有多个字段。多个字段对EDM原语或枚举类型无效。

要解决此问题,您可以提交从数据库返回单个字符串列的SQL字符串,也可以提供允许EF映射多个列的类型参数。

例如:

SELECT someStringColumn FROM ABC

OR

var results = DbContext.Database.SqlQuery<MyDto>(query).ToList();

MyDTO看起来像这样:

class MyDto
{
    public int AddressID { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
}