MVC 4 / Entity Framework中的自定义查询?

我目前有一个使用ASP.net MVC 4和entity framework构建的工作CRUD应用程序。 我对表使用EDMX模型,这些模型部署在实时服务器上的数据库中。

我想知道如何查询控制器中的表以返回一个视图,该视图包含来自每个表(连接)的列,作为一个表,基于从查询字符串返回的列标题

这些是我的表,我在他们各自的模型中为他们设置了getter和setter,模型是“Model1.edmx”

AccCompany AccControl ID ID Code ControlCode CompanyID Nominal AccountsCompany CostCentre Company Department 

我只是不明白如何使用自定义方法连接表,作为MVC框架。 EF似乎自己做了一切 – 就实际查询而言……

我喜欢两种方法。

第一个是直接的,使用entity framework中的导航方法:

控制器:

 public ActionResult Details(short id = 0) { AccCompany accComp = db.AccCompany.Find(id); if (accComp == null) { return HttpNotFound(); } return View(accComp); } 

视图:

 @model Some.Entities.AccCompany 
@Html.DisplayNameFor(model => model.Company)
@Html.DisplayFor(model => model.Company)
@Html.DisplayNameFor(model => model.AccControl.CostCentre)
@Html.DisplayFor(model => model.AccControl.CostCentre)

第二个涉及为特定视图创建自定义“视图模型”,并在视图中将其用作模型,更好地用于validationimo:

SomeViewModel.cs:

 public class SomeViewModel { [Required] public string Company { get; set; } [Required] [Display(Name = "Cost Centre")] public string CostCentre { get; set; } } 

然后在控制器中填充:

 public ActionResult Details(short id = 0) { AccCompany accComp = db.AccCompany.Find(id); if (accComp == null) { return HttpNotFound(); } SomeViewModel vm = new SomeViewModel(); vm.Company = accComp.Comany; vm.CostCentre = accComp.AccControl.CostCentre; return View(vm); } 

那么观点:

 @model Some.SomeViewModel 
@Html.DisplayNameFor(model => model.Company)
@Html.DisplayFor(model => model.Company)
@Html.DisplayNameFor(model => model.CostCentre)
@Html.DisplayFor(model => model.CostCentre)

希望这可以帮助

如果我理解你的问题,那就是你需要的

 var views = from company in context.AccCompany join control in context.AccControl on company.Code equals control.ControlCode where company.Code == Request.QueryString["Code"] select new JoinedView { CompanyId: company.CompanyID, Code: company.Code, ControlId: controlId, Nominal: control.Nominal // any other columns you need } 

其中JoinedView是一个包含两个实体的列的类。

如果您了解Linq,则无需为自定义查询编写更多代码。

 public ApiEntities Content = new ApiEntities(); public IQueryable GetCustomQuery(System.Linq.Expressions.Expression> where) where T : EntityObject { return Content.CreateObjectSet().Where(where); } 

运用

 var R = new Repo(); //Single query R.GetCustomQuery(x => x.Code == Request.QueryString["Code"]).FirstOrDefault(); //list query R.GetCustomQuery(x => x.Code == Request.QueryString["Code"]).ToList();