这可能是一个非常重要的问题,但是当编写跨越三个级别(或更多)的查询时,包含多个子实体的好方法是什么?
即我有4个表:Company,Employee,Employee_Car和Employee_Country
公司与员工有1:m的关系.
Employee与Employee_Car和Employee_Country都有1:m的关系.
如果我想编写一个返回所有4个表中数据的查询,我目前正在编写:
Company company = context.Companies
.Include("Employee.Employee_Car")
.Include("Employee.Employee_Country")
.FirstOrDefault(c => c.Id == companyID);
Run Code Online (Sandbox Code Playgroud)
必须有一个更优雅的方式!这是冗长的,并产生可怕的SQL
我在VS 2010中使用EF4
我得到了这个例外:
LINQ to Entities不支持指定的类型成员'付费'.仅支持初始值设定项,实体成员和实体导航属性.
public ActionResult Index()
{
var debts = storeDB.Orders
.Where(o => o.Paid == false)
.OrderByDescending(o => o.DateCreated);
return View(debts);
}
Run Code Online (Sandbox Code Playgroud)
我的Model类
public partial class Order
{
public bool Paid {
get {
return TotalPaid >= Total;
}
}
public decimal TotalPaid {
get {
return Payments.Sum(p => p.Amount);
}
}
Run Code Online (Sandbox Code Playgroud)
付款是一个包含字段数量的相关表格,如果我删除Where子句显示有关付款的正确信息,查询有效,任何线索有什么问题?
解决了如下建议的答案:
public ActionResult Index()
{
var debts = storeDB.Orders
.OrderByDescending(o => o.DateCreated)
.ToList()
.Where(o => o.Paid == false);
return View(debts);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试计算预算减去费用并在视图中显示.我有计算工作,但我坚持如何将结果合并到我的视图中.现在我收到错误:
EntityType TETSModel.Project不声明具有名称data的导航属性.
没有声明projects = from s in db.Projects.Include(p => data) select s;这可以正常工作,但不显示余额.
有人可以告诉我该怎么做吗?
从控制器:
public ViewResult Index()
{
var data = (from p in db.Projects
join ex in db.ExpenseItems on p.ProjectKEY equals ex.ProjectKEY
group ex by p into exgroup
select new Classes.Budget
{
ProjectKEY = exgroup.Key.ProjectKEY,
OverallBudgetMinusExpenses = exgroup.Key.OverallTechnologyBudget - exgroup.Sum(g => g.ExpenseAmount),
CurrentBudgetMinusExpenses = exgroup.Key.CurrentPeriodBudget - exgroup.Sum(g => g.ExpenseAmount)
});
var projects = from s in db.Projects.Include(p => p.ContractType).Include(p => p.Division)
select s;
projects = …Run Code Online (Sandbox Code Playgroud)