我有一个复杂的查询,它可以增长或变小,具体取决于它接收的参数。例如:
public string CreateQuery(string[] fields)
{
var query = "SELECT student_name,student_last_name FROM students";
if(fields[0]!= "")
{
query += " WHERE studient_id='"+fields[0]+"'";
}
if(fields[1] != null)
{
//them....
}
//and so on
return query;
}
所以我需要执行像webmatrix
这样的查询ViewBag.StudentInf = db.Query("Query string here...");
然后,我如何使用实体框架
执行查询字符串答案 0 :(得分:1)
对于.NET Framework版本4及更高版本:使用ObjectContext.ExecuteStoreCommand()
教程here
或尝试此功能
static void ExecuteSql(ObjectContext c, string sql)
{
var entityConnection = (System.Data.EntityClient.EntityConnection)c.Connection;
DbConnection conn = entityConnection.StoreConnection;
ConnectionState initialState = conn.State;
try
{
if (initialState != ConnectionState.Open)
conn.Open();
using (DbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
}
finally
{
if (initialState != ConnectionState.Open)
conn.Close();
}
}
答案 1 :(得分:1)
你真的不应该这样做。你冒着很大的风险,有人对你进行SQL注入攻击。
您可以执行此answer中建议的操作。
但如果你真的想这样做,你可以做到以下几点:
using (System.Data.Common.DbCommand cmd = db.Database.Connection.CreateCommand())
{
cmd.CommandText = "SELECT *...";
}
答案 2 :(得分:0)
如果您的问题是关于使用Linq to Entities构建动态查询,则至少可以使用Dynamic Linq。