我有一个部分结果视图,它接受表的名称和要查询的特定列的值。我读了DBContext API,发现Set(Type)应该返回一个可以对其进行CRUD操作的DBSet。我不知道如何在没有PK的情况下查询DBSet,因为用户不知道要查找的PK。
可能使用Classic ADO会更容易吗?
编辑:我弄清楚如何使用DbSet.SQLQuery函数,但没有线索来存储结果。我在调试器中检查了元素,SQLQuery确实有效,因为它找到了表中的所有行。
public class SF1DB : DbContext
{
//List of table names that feeds a DropDownList
public DbSet<tablelist> tables { get; set; }
//Data table
public DbSet<dataTable1> dataTable1 { get; set; }
public DbSet<dataTable2> dataTable2 { get; set; }
//...list of other tables
}
public PartialViewResult GetFeatures(String tablelist, String[] countyfp)
{
String type = "MvcApplication1.Models." + tablelist;
Type dbType = Type.GetType(type);
DbSet set = _db.Set(dbType);
String sql = "select * from " + tablelist;
//How do I store the result in a variable?
set.SqlQuery(sql);
return PartialView();
}
答案 0 :(得分:0)
我通过创建一个与用户选择的DbSet类型相同的List来解决这个问题。然后我使用SQLQuery的GetEnumerator方法并通过结果迭代并添加到新列表。最后,将列表传递给局部视图。
public PartialViewResult GetFeatures(String tablelist, String[] countyfp)
{
String type = "MvcApplication1.Models." + tablelist;
Type dbType = Type.GetType(type);
DbSet set = _db.Set(dbType);
String sql = "select * from " + tablelist + " where ";
Type listType = typeof(List<>).MakeGenericType(dbType);
IList list = (IList)Activator.CreateInstance(listType);
for (int i = 0; i < countyfp.Length; i++)
{
sql += "cntyidfp like '%" + countyfp[i] + "'";
if (i < (countyfp.Length - 1))
{
sql += " or ";
}
}
IEnumerator result = set.SqlQuery(sql).GetEnumerator();
while (result.MoveNext())
{
list.Add(result.Current);
}
return PartialView(list);
}