获取每个id - linq的最新记录及其详细信息

时间:2017-10-01 20:18:38

标签: asp.net-mvc linq

我有这三个表:

$listMapper->add(
                'classes',null, array(
                    'editable' => true,
                    'type' => 'sonata_type_model_autocomplete',
                    'multiple' => true,
                    'property' => 'name'
                )
            );

我想创建一个LINQ查询,在那里我将能够获得 id,name,typeId,as_of中的最新日期及其当时的数量

我试过这样做,但这就是我所拥有的。我是asp.net和LINQ的新手,所以我真的不知道我在做什么。

Item
id, name, isDeleted, typeId

ItemType
id, name, isDeleted

Item_Quantity
itemId, as_of(datetime), quantity 
//the sample data
1, 2017-09-19, 55
2, 2017-08-21, 37
1, 2017-09-20, 49

1 个答案:

答案 0 :(得分:0)

假设您的Item实体具有ItemQuantities

的集合属性
public class Item
{
   public int Id { set;get; }
   public string Name { set;get; }
   public int ItemTypeId { set;get;} 
   public virtual ItemType ItemType { set;get; }
   public ICollection<ItemQuantity> ItemQuantities { set; get; }
}
public class ItemType
{
   public int Id { set;get; }
   public string Name { set;get; }
}   
public class ItemQuantity
{
   public int Id { set;get; }
   public DateTime AsOf { set;get ;}
   public int Qunatity { set;get;}
   public int ItemId { set;get; }
   public virtual Item Item { set;get; }
}

您可以查询db.Items集合,并按ItemQuantities值对每个项目的AsOf属性进行排序,并获取第一项。

因此,创建一个视图模型来表示此数据

public class ItemVm
{
   public int Id { set; get; } 
   public string Name  { set;get; }
   public string ItemTypeName { set;get; }
   public DateTime? RecentOrderDate  { set;get; }
   public double? Qty { set;get;}
}

现在在Linq查询中,投影到这个新的视图模型。

var items =  db.Items.Select(g => new ItemVm
{
    Id = g.Id,
    Name = g.Name,Id
    ItemTypeName= g.ItemType.Name,
    RecentOrderDate = g.ItemQuantities.Any()? 
                g.ItemQuantities.OrderByDescending(q=>q.AsOf).FirstOrDefault().AsOf
               :(DateTime?)null,
    Qty = g.ItemQuantities.Any() ?
                g.ItemQuantities.OrderByDescending(q => q.AsOf).FirstOrDefault().Quantity
               :(int?) null,

}).ToList();

上面的代码将创建我们的新视图模型类对象的列表。因此,如果您在操作方法中使用此代码并传递给视图,则需要确保更新视图,以便现在可以将其强类型化为ItemVm

的集合。
return View(items);

,您的观点将是

@model List<ItemVm>