利用EF FromSql 自定义查询,有时间须要的字段可能是自定义的,因此须要返回自定义类的list
一、System.Data.Common
/// <summary>
/// EF query by sql
/// </summary>
/// <param name="context"></param>
/// <param name="CommandText">select * from table where Id=@Id</param>
/// <param name="cmdType"></param>
/// <param name="dicParams">dicParams.Add("@Id", 1);</param>
/// <returns></returns>
public static DataTable GetDTableCommon(this DbContext context, string CommandText, CommandType cmdType = CommandType.Text, Dictionary<string, object> dicParams = null)
{
DataTable dt = new DataTable();
DatabaseFacade dbFacade = new DatabaseFacade(context);
var conn = dbFacade.GetDbConnection();
conn.Open();
DbCommand cmd = conn.CreateCommand();
cmd.CommandText = CommandText;
cmd.CommandType = cmdType;
foreach (var parameter in dicParams == null ? new Dictionary<string, object>() : dicParams)
{
DbParameter p = cmd.CreateParameter();
p.ParameterName = parameter.Key;
p.Value = parameter.Value;
cmd.Parameters.Add(p);
}
var dr = cmd.ExecuteReader();
dt.Load(dr);
dr.Close();
conn.Close();
return dt;
}
二 、 FromSql
1、首先定义自定义entity 类:seller1
public partial class sellers1
{
public int Id { get; set; }
}
2、然后在 Context类中把自定义类加入到DbSet,
PS:自动生成的Context类为Partial,为了方便管理, 可以再添加一个同样的类Context 专门来添加自定义类到Context
public partial class MyContext{
public virtual DbSet<sellers1> sellers1 { get; set; }
}
3、然后执行如下语句
var sql="select * from table"
var list1 = MyContext.Set<sellers1>().FromSql(sql).ToList();