原始 Sql 查询的动态实体使用 Entity Framework
Dynamic Entity for Raw Sql Query using Entity Framework
我在这里挠头。我有一个 bootstrap 模式,其中有一个用于输入 sql 查询的字段。我传递的查询使用对控制器的 AJAX 调用,并使用下面的代码和 returns 一个 JSON 对象执行 sql 查询。像这样:
context.Database.SqlQuery(typeof(object), query);
但我得到的只是空对象。当我不知道这些列时,我无法传递类型。例如我可以这样做:
public class CusType {
public CusType(){}
public int Id { get; set; }
public string Name { get; set; }
}
然后做这样的事情:
context.Database.SqlQuery(typeof(CusType), query);
但是当我不知道或不能知道这些列时,这对我没有帮助。我什至尝试过使用 ExpandoObjects 的想法。示例:
List<string> columns = new List<string>();
string tmpCol = query;
string[] seperator = new string[] { "from" };
tmpCol = query.ToLower()
.Replace(@"\s+", "")
.Replace("select", "");
tmpCol = tmpCol.Split(seperator, 1, StringSplitOptions.RemoveEmptyEntries)[0];
for (int i = 0; i < tmpCol.Split(',').Length; i++)
{
columns.Add(tmpCol.Split(',')[i]);
}
dynamic data = new ExpandoObject();
IDictionary<string, object> props = (IDictionary<string, object>)data;
foreach (var column in columns)
{
props.Add(column.ToString(), column.ToString());
}
return context.Database.SqlQuery(data.GetType(), query);
但是当我想执行查询时,我该怎么办?
context.Database.SqlQuery(data.GetType()??, query);
即使我确实放入 data.GetType() 它 returns 空对象。
在这两个例子中(使用 typeof(object) 和 typeof(data.GetType()) 我得到了这个 JSON 返回的对象:
[{},{},{},{},{},{},{},{},{},{},{},{},{}]
任何 ideas/suggestions?
Entity Framework 根据指定的类型填充模型。您将需要使用其他东西或使用 DataReader 去老学校。
我在这里挠头。我有一个 bootstrap 模式,其中有一个用于输入 sql 查询的字段。我传递的查询使用对控制器的 AJAX 调用,并使用下面的代码和 returns 一个 JSON 对象执行 sql 查询。像这样:
context.Database.SqlQuery(typeof(object), query);
但我得到的只是空对象。当我不知道这些列时,我无法传递类型。例如我可以这样做:
public class CusType {
public CusType(){}
public int Id { get; set; }
public string Name { get; set; }
}
然后做这样的事情:
context.Database.SqlQuery(typeof(CusType), query);
但是当我不知道或不能知道这些列时,这对我没有帮助。我什至尝试过使用 ExpandoObjects 的想法。示例:
List<string> columns = new List<string>();
string tmpCol = query;
string[] seperator = new string[] { "from" };
tmpCol = query.ToLower()
.Replace(@"\s+", "")
.Replace("select", "");
tmpCol = tmpCol.Split(seperator, 1, StringSplitOptions.RemoveEmptyEntries)[0];
for (int i = 0; i < tmpCol.Split(',').Length; i++)
{
columns.Add(tmpCol.Split(',')[i]);
}
dynamic data = new ExpandoObject();
IDictionary<string, object> props = (IDictionary<string, object>)data;
foreach (var column in columns)
{
props.Add(column.ToString(), column.ToString());
}
return context.Database.SqlQuery(data.GetType(), query);
但是当我想执行查询时,我该怎么办?
context.Database.SqlQuery(data.GetType()??, query);
即使我确实放入 data.GetType() 它 returns 空对象。
在这两个例子中(使用 typeof(object) 和 typeof(data.GetType()) 我得到了这个 JSON 返回的对象:
[{},{},{},{},{},{},{},{},{},{},{},{},{}]
任何 ideas/suggestions?
Entity Framework 根据指定的类型填充模型。您将需要使用其他东西或使用 DataReader 去老学校。