2016-04-09 6 views
0

LINQメソッドのクエリを以下のテーブルTimeunitに作成し、外部キーEmployeeまたはOrderを使用して特定の行からデータを取得できますか?外部キーを使用して他のテーブルから値を取得することが可能なLINQクエリ

これは私が達成しようとしているものです。 Viewには、ViewModelにTimeunit、Employee、Orderを渡します。また、Viewの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; } 
} 

EDIT 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; } 
} 

EDIT 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).Select(x => x.Employee.FirstName)' – Jens

+0

あなたのビューモデルとは何を働くかもしれません。プロパティ 'orderlist'は' Timeunit'のコレクションですか? –

+0

@StephenMuecke他の2つのテーブルを追加しました。 –

答えて

1

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; } 
} 

とコントローラで、ビューモデルにあなたの

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); 

データを投影するLINQクエリを使用し、中に表示したいものを表現するために、ビューモデルを作成して開始ビュー

@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();'(編集を参照) –

関連する問題