2017-06-07 49 views
0

在我的Web应用程序中,我从数据库中获取2个对象列表。基于对象ID加入2个对象列表

第一对象列表员工

1 
    Name: Tom 
    Week1: 1 
    Week2: 3 
    Week3: 7 
2 
    Name: Mike 
    Week1: 2 
    Week2: 1 
    Week3: 7 

对象的第二个列表listOfId

1 
    id: 1 
    color: green 
    symbol: AT 
2 
    id: 2 
    color: red 
    symbol: TB 
3 
    id: 3 
    color: blue 
    symbol: TD 

我希望能够现在以表格的形式显示出来,其中用于每个星期,我显示本周的颜色和符号(每周与Employee.Week#= listOfId.id匹配)

像这样

Name | Week1 | Week1 Color | Week1 Symbol | Week2 | Week 2 Color etc... 
Tom  1  green   AT   3   blue 
Mike  2  red    TB   1   green 

我总共将有恒定的20周为每一位员工。

我考虑编写一个SQL查询,它将采用周ID,并返回颜色和符号。但对于50人* 20周...我需要运行这个查询1000次。

我正在寻找更好的方法来解决这一问题

我的模型:

public class WeekViewModel 
    { 
     public int Id{ get; set; } 
     public string ShortNAme { get; set; } 
     public string Description { get; set; } 
     public int Color { get; set; } 
    } 
} 


public class EmployeeWeekViewModel 
{ 
    public string full_name { get; set; } 
    public string location { get; set; } 
    public int week1 { get; set; } 
    public int week2 { get; set; } 
    public int week3 { get; set; } 

} 
+0

是关于如何在查询数据库后如何加入2个列表或如何进行单个数据库查询的问题? –

+0

将这两个对象列表合并到一个对象中的最佳方法是什么,但要在每个星期执行此操作。可能在应用程序中,而不是SQL –

+0

[请不要将标记置于问题标题中](https://stackoverflow.com/help/tagging) – Liam

回答

0

如果我让你正确的,你有两个列表从DB来:

  • employeesList其代表雇员与他们相应的星期ID
  • weeksList表示员工的周数。

现在,您想加入这两个列表以显示简单表格格式中的信息。我会做这样的事情:

public class EmployeeWeekViewModel{ 
    public string EmployeeName{get;set;} 
    public WeekViewModel Week1 {get;set;} 
    public WeekViewModel Week2 {get;set;} 
    ... 
    public WeekViewModel Week20 {get;set;} 
} 

public class WeekViewModel{ 
    public int Id{get;set;} 
    public string Color{get;set;} 
    public string Symbol{get;set;} 
} 

employeesList.Select(t=> new EmployeeWeekViewModel(){ 
    EmployeeName = t.Name, 
    Week1 = weeksList.FirstOrDefault(w => w.id == t.Week1).Select(w => new WeekViewModel(){ 
    Id = w.id, 
    Color = w.color, 
    Symbol = w.symbol 
    }), 
    Week2 = weeksList.FirstOrDefault(w => w.id == t.Week2).Select(w => new WeekViewModel(){ 
    Id = w.id, 
    Color = w.color, 
    Symbol = w.symbol 
    }), 
    ... 
}); 

为了不使每个星期的请求,我会建议发送给您查询一周ID的列表,让他们一次(checkout this example)。

+0

部分地说,这就是我一直在寻找的东西。但我在比较值...(w => w.id == t.Week1)时遇到了一些问题,它无法比较int到WeekViewModel :( –

+0

't.Week1',代表'你从DB –

+0

得到的对象中的第1周属性,但我仍然没有得到它,我已经将我的模型添加到该问题中,Week1等是int类型的,它从db返回。 –