Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET Core列表中添加日期相同的值_C#_Asp.net Core - Fatal编程技术网

C# 在ASP.NET Core列表中添加日期相同的值

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

我是asp.net核心的新手。我有一个列表对象,其中包含大量数据,包括日期、订单值、交货成本、订单状态等字段

我要做的是添加属于同一日期的所有订单值。 有人能帮我解决这个问题吗

例如,列表中的数据如下所示:-

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()@user14375406
fOoreach(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>