是的,只要把它放在构造函数中(我假设的类型db.Catagories
是Catagory
)
public class ClassName
{
public ClassName()
{
db = //do whatever is needed to initialize the db context
myQuery = from cat in db.Categories where cat.CategoryID != null select cat;
}
DataSourceContext db;
IQueryable<Catagory> myQuery;
public ActionResult Edit(long id = 0)
{
ViewBag.ParentCategoryID = myQuery;
...
}
public ActionResult Create()
{
ViewBag.ParentCategoryID = myQuery;
...
}
}
db
如果访问是以线程安全的方式完成的(通过内部内部DataSourceContext
或您在防御性编码中),这也可以在具有静态成员的静态构造函数中完成
然而,更好的方法是调用一个静态函数,该函数返回您想要的查询并在您想要连接的数据库的上下文中传递。
public static IQueryable<Catagory> NonNullCatagoriesQuery(DataSourceContext db)
{
return from cat in db.Categories where cat.CategoryID != null select cat;
}
然后在你的代码中你只是做
public ActionResult Edit(long id = 0)
{
ViewBag.ParentCategoryID = NonNullCatagoriesQuery(db);
...
}
public ActionResult Create()
{
ViewBag.ParentCategoryID = NonNullCatagoriesQuery(db);
...
}
您也可以将该函数移入包含 db 上下文的存储库类中,这样您就不需要将其传递进去,但您没有在代码示例中包含您是如何获得db
.