【问题标题】:c# How to convert list to dictonary by Date field [duplicate]c#如何按日期字段将列表转换为字典[重复]
【发布时间】:2021-12-02 20:09:02
【问题描述】:

我有一个包含 5 项的列表。 每个项目都包含 DateTime 字段和另一个字段。

我的目标是创建两个块,每个块都有各自的日期

在这种情况下,列表项中存在两个日期 -> 24/11 和 25/11。

我想按日期创建一个字典,每个日期都将包含该日期的项目。

喜欢:

这是代码:

namespace Test
{
public class CostDbDto
{
    public DateTime Date { get; set; }
    public decimal Cost { get; set; }
    public int JobId { get; set; }
}

class Program
{

    static void Main(string[] args)
    {

        try
        {
            List<CostDbDto> costList = new List<CostDbDto>();
            costList.Add(new CostDbDto
            {
                Date = DateTime.Parse("2021-11-24 15:03:39"),
                Cost = 3,
                JobId = 111
            });

            costList.Add(new CostDbDto
            {
                Date = DateTime.Parse("2021-11-24 16:03:39"),
                Cost = 55,
                JobId = 111
            });

            costList.Add(new CostDbDto
            {
                Date = DateTime.Parse("2021-11-24 17:03:39"),
                Cost = 22,
                JobId = 111
            });

            costList.Add(new CostDbDto
            {
                Date = DateTime.Parse("2021-11-25 15:03:39"),
                Cost = 44,
                JobId = 111
            });

            costList.Add(new CostDbDto
            {
                Date = DateTime.Parse("2021-11-25 16:03:39"),
                Cost = 33,
                JobId = 111
            });


            var ss = costList.GroupBy(a => a.Date).ToList();


        }
        catch (Exception)
        {

            throw;
        }
        finally
        {
            Console.ReadLine();
        }
    }



    }
}

如果你跑你,我们会得到

希望我说的很清楚,感谢您的帮助。

【问题讨论】:

  • 你试过什么?请不要只发布图片,发布实际代码。
  • 你可能想使用LookUp, var lookUp = list.ToLookUp(item =&gt; item.Key);
  • 你说得对,我编辑并插入了代码。我试过你的代码,但对我不起作用。你能再检查一次吗?
  • 但是你所有的日期时间都是不同的,所以有 5 组,每组大小为 1。如果您不理解,请将它们视为数字:1.1、1.2、1.5、2.5、2.7。 Group by theNumber 意味着你有 5 个组,因为所有的数字都不一样。我认为您想要GroupBy(x=&gt;x.Date.Date) - 不幸的是您的属性被称为Date,因为 DateTime 也有一个称为Date 的属性,它删除了时间部分。如果您将public DateTime Date { get; set; } 称为public DateTime CostDate { get; set; },那么GroupBy(x=&gt;x.CostDate.Date) 就不那么容易混淆了
  • 重新阅读我的评论;如果有不明白的部分,请告诉我。不要打电话给你的财产Date;这很令人困惑,因为您必须调用 GroupBy(x=&gt;x.Date.Date) - 第一个 Date 是您在 CostDbDto 中的 DateTime 属性,第二个 DateDate property of a DateTime

标签: c# list dictionary


【解决方案1】:

您可以使用.ToDictionary() 快速将列表转换为字典:https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.todictionary?view=net-6.0

var whateverYouWantToNameYourDictionary = listOfDates.ToDictionary(l => l, l => "Whatever the string is you want. Format it with code however.");

【讨论】:

  • 我被添加了一个代码示例,我尝试了您提供的内容,但对我不起作用,请您再次帮助我
【解决方案2】:
list
    .GroupBy(x => x.Date)
    .ToDictionary(g => g.Key, g => g.Select(y => y.Value));

这应该是它背后的主要思想。显然,更改变量名称以反映您自己的代码。

【讨论】:

  • 我被添加了一个代码示例,我尝试了您提供的内容,但对我不起作用,请您再次帮助我
猜你喜欢
  • 2017-12-04
  • 2016-01-10
  • 2011-10-17
  • 2017-10-01
  • 2019-11-27
  • 2020-03-19
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
相关资源
最近更新 更多