如何使用实体框架创建查询字符串

时间:2013-04-10 15:48:16

标签: c# entity-framework

我有一个复杂的查询,它可以增长或变小,具体取决于它接收的参数。例如:

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

然后,我如何使用实体框架

执行查询字符串

3 个答案:

答案 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