2016-09-22 27 views
0

ユーザーがSQLクエリを入力できるページがあります。このクエリは、自分のデータベース内の任意のテーブルに対して行うことができます。私は対応するテーブルに対してこのクエリを実行し、結果を私のビューに表示する必要があります。これを行う方法?Entity Frameworkで動的SQLクエリを作成する方法は?

たとえば、ユーザーはSelect * from ABCまたはselect max(price) from itemsを入力できます。

私が試した:

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

をしかし、これはエラーをスローします:

The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types.

私はビューに渡して、それを表示することができる必要がありますどのような結果。

助けてください。

+0

するvarブログ= context.YourModel.SqlQueryは(「DBO SELECT * FROM。 YourTable ")。ToList(); – MstfAsan

+0

「myModel」を指定することはできません。ユーザがクエリとして入力できる内容がわからないためです。だからモデルが何であれ、それを実行する必要があります。 – Shafeek

+0

ユーザにdbに対して直接SQLを実行させることは、おそらく非常に悪い考えです。 – Wurd

答えて

0

あなたは、このエラーを解決しますが、あなただけ返される結果の数を取得することができます

SqlQuery<dynamic>" 

を使用することができます。だから、クエリがいくつかのデータを返すかどうかだけ確認することができます。しかし、返されるデータの種類を知る必要があります。

データベースにクエリを入力するユーザーがいる可能性があります。

0

エラーメッセージは正確に問題を述べている:

The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types.

問題を修正するには、データベースから単一の文字列の列を返すSQL文字列を提出、またはEFができるようにするタイプパラメータを供給することができますいずれか複数の列をマップします。例えば

SELECT someStringColumn FROM ABC 

OR MyDTOは、このようなものになります

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

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; } 
} 
関連する問題