2

我有一个复杂的查询,它可以根据接收到的参数而增长或变小。例子:

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...");

那么,如何使用实体框架执行查询字符串?

4

3 回答 3

1

你真的不应该这样做。你冒着有人对你执行 SQL 注入攻击的风险。

您可以执行此答案中推荐的操作。

但是,如果您真的想这样做,可以执行以下操作:

using (System.Data.Common.DbCommand cmd = db.Database.Connection.CreateCommand())
{
    cmd.CommandText = "SELECT *...";
}
于 2013-04-10T15:56:08.930 回答
1

For .NET Framework version 4 and above: use ObjectContext.ExecuteStoreCommand()

A tutorial here

Or try this function

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(); 
    }
}
于 2013-04-10T15:54:54.707 回答
0

如果您的问题是关于使用 Linq to Entities 构建动态查询,您至少可以使用Dynamic Linq

于 2013-04-10T16:08:05.380 回答