2017-04-22 128 views
0

显示数据说我有两种不同的模式:如何从两个模型在一个表中基于共同的属性

public class ModelA 
{ 
    public int  Id   { get; set; } 
    public DateTime Date  { get; set; } 
    public string Attribute1 { get; set; } 
} 

public class ModelB 
{ 
    public int  Id   { get; set; } 
    public DateTime Date  { get; set; } 
    public string Attribute2 { get; set; } 
    public string Attribute3 { get; set; } 
} 

我想在同一个表中的单个视图来显示这一点。模型大多不相关。我想忽略的ID在该表中,但显示按日期排序的项目以这样的方式:

| Date  | Attribute1 | Attribute2 | Attribute3 | 
| 2008-01-01 | null  | value  | value  | (ModelB item) 
| 2009-01-01 | value  | null  | null  | (ModelA item) 
| 2010-01-01 | value  | null  | null  | (ModelA item) 
| 2011-01-01 | null  | value  | value  | (ModelB item) 

为清楚:我不希望通过在表,其中有空白点,显示比其他的区别其中一个单元没有数据。

加入数据集不起作用,因为没有要加入的值(我希望显示所有日期),它更多是我想要加入的列。

我该怎么做到这一点?

+0

目前尚不清楚你的要求,但它相当于SQL的' UNION'操作? – sergiol

+0

它确实是一个联合操作符,并具有创建新对象所需的额外步骤,以便能够这样做,如接受的答案中所示。 – deemzet

回答

0

您可以联合他们,这样的事情你应该做的

list1.Select(x => new { 
          Id   = x.Id, 
          Date  = x.Date, 
          Attribute1 = x.Attribute1, 
          Attribute2 = null, 
          Attribute3 = null 
         } 
      ).Union(list2.Select(x => new { 
          Id   = x.Id, 
          Date  = x.Date, 
          Attribute1 = null, 
          Attribute2 = x.Attribute2, 
          Attribute3 = x.Attribute3 
        })); 

,做你的工作在联盟榜首

+0

我最终创建了一个新类来捕获这个无名称的对象,并在我看来用它。完美工作! – deemzet

相关问题