2016-04-09 101 views
0

是否可以對下面的表Timeunit進行LINQ方法查詢並使用外鍵Employee或Order從特定行中獲取數據?LINQ查詢可能使用外鍵從其他表中獲取值

這就是我想要實現的。在View中,我將ViewModel與Timeunit,Employee和Order一起傳遞。在視圖中的訂單的ForEach循環中,我嘗試獲取所有已經處理該訂單的員工。這是可能的還是我在這裏想錯了?

@foreach (var item1 in Model.orderlist) 
{ 
@Model.timeunitlist.Where(x => x.OrderID == item1.EmployeeID).FirstName ???? 
} 

public class Timeunit 
{ 
public int ID { get; set; } 
public int Week { get; set; } 
public int HoursPerWeek { get; set; } 
public int EmployeeID { get; set; } 
public int? OrderID { get; set; } 
public virtual Employee Employee { get; set; } 
public virtual Order Order { get; set; } 
} 

編輯1:其他兩個表

public class Order 
{ 
public int ID { get; set; } 
public string Name { get; set; } 
public int? ManufacturerID { get; set; } 
public virtual Manufacturer Manufacturer { get; set; } 
public virtual ICollection<Employee> Employees { get; set; } 
} 

public class Employee 
{ 
public int ID { get; set; } 
public string Name { get; set; } 
public int EmployeeNumber { get; set; } 
public virtual ICollection<Timeunit> Timeunits { get; set; } 
public virtual ICollection<Order> Orders { get; set; } 
} 

編輯2:視圖模型

public class ViewModel 
{ 
    public List<Timeunit> timeunitList = new List<Timeunit>(); 
    public List<Employee> employeeList = new List<Employee>(); 
    public List<Order> orderList = new List<Order>(); 
} 

我需要的是對每一個訂單,我需要列出所有匹配的Timeunits每個訂單在特定的一週,並顯示每個員工在每個訂單中工作了多少小時

+0

'@ Model.timeunitlist.Where(X => x.OrderID == item1.EmployeeID)。選擇(X => x.Employee.FirstName)'可能工作 – Jens

+0

什麼是你的視圖模型。屬性'orderlist'是'Timeunit'的集合嗎? –

+0

@StephenMuecke我添加了其他兩個表,如果這可能有任何幫助? –

回答

1

要顯示您的colle Timeunit分組Order您需要使用linq .GroupBy()子句。通過創建視圖模型來表示要在視圖

public class OrderVM 
{ 
    public string Name { get; set; } 
    public IEnumerable<EmployeeVM> Employees { get; set; } 
} 
public class EmployeeVM 
{ 
    public string Name { get; set; } 
    public int Hours { get; set; } 
} 

和控制器,使用LINQ查詢到項目,您的數據到視圖模型

IEnumerable<OrderVM> model = db.Timeunits 
    .Where(x => x.Week == 1) 
    .GroupBy(x => x.OrderID) 
    .Select(x => new OrderVM() 
    { 
     Name = x.FirstOrDefault().Order.Name, 
     Employees = x.Select(y => new EmployeeVM() 
     { 
      Name = y.Employee.Name, 
      Hours = y.HoursPerWeek 
     }) 
    }).AsEnumerable(); 
return View(model); 

,然後在顯示的內容開始視圖

@model IEnumerable<OrderVM> 
@foreach (var order in Model) 
{ 
    @Html.DisplayFor(m => order.Name) 
    foreach(var employee in order.Employees) 
    { 
     @Html.DisplayFor(m => employee.Name) 
     @Html.DisplayFor(m => employee.Hours) 
    } 
} 
+0

控制器代碼中某處存在缺失)。我無法弄清楚它應該在哪裏?當我嘗試添加代碼時,我只在代碼下面出現紅色錯誤行。 –

+0

我想在最後一個}之前添加它,但是隨後我在代碼中出現了紅線,並且出現了一個非常長的錯誤信息,並以「是否缺少演員表」結束?也許這可能是一個線索 –

+0

缺少的')'在上面的行}}。AsEnumerable();'(見編輯) –

相關問題