C# 如何使用实体框架生成查询字符串

C# 如何使用实体框架生成查询字符串,c#,entity-framework,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(fi

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

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

那么,对于.NET Framework版本4及更高版本,如何使用entity Framework执行查询字符串??

:使用

教程

或者试试这个功能

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(); 
    }
}

你真的不应该这样做。您的运行可能会有人对您执行SQL注入攻击

您可以执行类似于本文中推荐的操作

但如果你真的想这样做,你可以做以下几点:

using (System.Data.Common.DbCommand cmd = db.Database.Connection.CreateCommand())
{
    cmd.CommandText = "SELECT *...";
}

如果您的问题是关于使用LINQtoEntities构建动态查询,那么您至少可以使用