C# 在ASP.NET Core列表中添加日期相同的值
我是asp.net核心的新手。我有一个列表对象,其中包含大量数据,包括日期、订单值、交货成本、订单状态等字段 我要做的是添加属于同一日期的所有订单值。 有人能帮我解决这个问题吗 例如,列表中的数据如下所示:-C# 在ASP.NET Core列表中添加日期相同的值,c#,asp.net-core,C#,Asp.net Core,我是asp.net核心的新手。我有一个列表对象,其中包含大量数据,包括日期、订单值、交货成本、订单状态等字段 我要做的是添加属于同一日期的所有订单值。 有人能帮我解决这个问题吗 例如,列表中的数据如下所示:- Order Date Order Value -------------------------------------- 24/09/2020 £3 24/09/2020 £5
Order Date Order Value
--------------------------------------
24/09/2020 £3
24/09/2020 £5
26/09/2020 £7
26/09/2020 £2
26/09/2020 £3
我希望不重复地显示日期,并添加具有相同日期的值,并将其存储在列表中,假设采用如下
顺序
类:
public class Order
{
public DateTime DateCreated { get; set; }
public decimal Value { get; set; }
}
您可以先输入订单日期,然后对每组中的订单进行排序。下面是一个例子:
using System;
using System.Collections.Generic;
using System.Linq;
static void Main(string[] args)
{
var orders = new List<Order>
{
new Order { DateCreated = DateTime.Parse("24/09/2020"), Value = 3 },
new Order { DateCreated = DateTime.Parse("24/09/2020"), Value = 5 },
new Order { DateCreated = DateTime.Parse("26/09/2020"), Value = 7 },
new Order { DateCreated = DateTime.Parse("26/09/2020"), Value = 2 },
new Order { DateCreated = DateTime.Parse("26/09/2020"), Value = 3 },
};
var orderTotals = orders
.GroupBy(x => x.DateCreated)
.Select(group => new
{
DateCreated = group.Key,
Total = group.Select(order => order.Value).Sum()
});
foreach (var item in orderTotals)
{
Console.WriteLine($"{item.DateCreated} - {item.Total}");
}
}
根据评论更新
假设您使用的是实体框架,执行上述操作的过程基本相同。为了使将数据返回给调用者更容易,让我们定义另一个类:
public class OrderTotal
{
public DateTime DateCreated { get; set; }
public decimal Total { get; set; }
}
这意味着您可以在页面中执行以下操作:
public class OrderModel : PageModel
{
private readonly YourDbContext _dbContext;
public OrderModel(YourDbContext dbContext)
{
_dbContext = dbContext;
}
}
public IEnumerable<OrderTotal> OrderTotals { get; set; }
public async Task OnGetAsync()
{
// Read the orders from the database, instead of from a list.
var orderTotals = _dbContext.Orders
.GroupBy(x => x.DateCreated)
// Notice we're using OrderTotal now, rather than an
// anonymous type. This is to make it easier to
// use the data outside of this method.
.Select(group => new OrderTotal
{
DateCreated = group.Key,
Total = group.Select(order => order.Value).Sum()
});
OrderTotals = await orderTotals.AsNoTracking().ToListAsync();
}
public类OrderModel:PageModel
{
私有只读YourDbContext\u dbContext;
公共订单模型(YourDbContext)
{
_dbContext=dbContext;
}
}
公共IEnumerable OrderTotals{get;set;}
公共异步任务OnGetAsync()
{
//从数据库中读取订单,而不是从列表中读取。
var orderTotals=\u dbContext.Orders
.GroupBy(x=>x.DateCreated)
//注意,我们现在使用的是OrderTotal,而不是
//匿名类型。这是为了更容易
//使用此方法之外的数据。
.选择(组=>new OrderTotal
{
DateCreated=group.Key,
总计=组。选择(顺序=>order.Value)。总和()
});
OrderTotals=等待OrderTotals.AsNoTracking().ToListSync();
}
然后,对于视图部分:
@page
@model IEnumerable<YourProject.Models.OrderTotal>
<table>
<thead>
<tr>
<th>Order Date</th>
<th>Order Total</th>
</tr>
</thead>
<tbody>
@foreach (var order in Model)
{
<tr>
<td>@order.DateCreated</td>
<td>@order.Total</td>
</tr>
}
</tbody>
</table>
@page
@模型IEnumerable
订购日期
订单总数
@foreach(模型中的var顺序)
{
@order.DateCreated
@订单,总计
}
1)您已经用来执行此操作的列表代码在哪里?当你试着使用它时,你有没有收到任何错误。没有,我没有收到任何错误,我能够正确地显示数据库中的数据。下面是列表代码var res=await dbContext.Order.OrderBy(x=>x.OrderModified.toListSync()@user14375406fOoreach(res中的var item){if(item.Id==defaultId){StoreDetails.Add(item);}}存储详细信息是一个包含所有项目的列表,非常感谢您的回复。真的很感激,但还是有一个问题。我将从数据库中获取的日期和值不是硬编码的,因此如何识别日期是否相同,例如日期是2020年9月24日还是2020年9月26日。@user14375406没有问题GroupBy
对相同的内容进行分组,因此,如果Orders
表中的两行或以何种方式存储它们,具有相同的日期,则它们将被分组在一起。但这确实假设您为要分组的每一行存储了完全相同的日期。@user14375406我添加了一个简单的示例,假设您使用的是实体框架。非常感谢@John H的回答。我只是个新手,所以如果我激怒了你们,我道歉。我没有多少知识。我正在使用api/controller,所以我不知道是否可以返回_dbContext.orders而不是返回页面。我做这一切的地方是从PageModel衍生出来的,所以请你再详细说明一下。非常感谢您的光临advance@user14375406我添加了一个更大的示例,但这就是我目前所能做的。你真的需要学习这两方面的教程,如果你正在使用的话,因为你缺少一些基础知识,这意味着你几乎不可能超越这一点来帮助你。
@page
@model IEnumerable<YourProject.Models.OrderTotal>
<table>
<thead>
<tr>
<th>Order Date</th>
<th>Order Total</th>
</tr>
</thead>
<tbody>
@foreach (var order in Model)
{
<tr>
<td>@order.DateCreated</td>
<td>@order.Total</td>
</tr>
}
</tbody>
</table>