从列表内的列表中按项目排序 - c#

我有以下课程的清单:

public class MonthlyConsumption : UserData
{
    public string Unit { get; set; }

    public List<DailyConsumption> DailyConsumptions { get; set; }
}

public class DailyConsumption
{
    public DateTime Day { get; set; }
    public double? Value { get; set; }
}

因此,如您所见,我有项目列表,其中每个项目也有内部日期列表。

我的问题是如何通过内部列表内的specyfic元素对主列表进行排序。

示例:我具有类型MonthlyConsumption的列表。该列表的每个元素都有类型为DailyConsumption的集合,并且该集合的日期为从今年一​​月起的10天。如何在1月1日之前订购我的主列表?

更新:
恐怕我用错误的词表达了我的问题,我真正想做的是订购我的类型monthlyConsumption的列表,其中每个项目在特定日期都有自己的按值类型的DailyConsumption类型列表,因此,如果列表中的每个项目有10天在1月1日至10日的内部收藏中,我想按1月1日的值对我的主列表进行排序。

更新资料
我试过了

return monthlyConsumption.OrderBy(x => x.DailyConsumptions.Where(y => y.Day.Day == 1))
                         .ToList();

但这给了我至少一个对象必须实现IComparable

参考方案

如果我理解正确的话,也许是这样的事情:

var targetDay = DateTime.Now; //set to Jan 1st
var result =
    monthylConsumptions.OrderBy(
        x =>
        x.DailyConsumptions.Where(y => y.Day.Date == targetDay.Date).Select(z => (!z.Value.HasValue ? 0 : z.Value.Value)).SingleOrDefault());

根据您的示例,“ targetDay”应设置为1月1日。

这将在您指定的日期按值升序排序,并在该特定月份中没有默认值时考虑默认值。

编辑:
我刚刚测试了以下单元测试,它通过了,但没有显示您所描述的错误:

[TestFixture]
public class LinqSortTest
{
    public class MonthlyConsumption
    {
        public string Unit { get; set; }

        public List<DailyConsumption> DailyConsumptions { get; set; }
    }

    public class DailyConsumption
    {
        public DateTime Day { get; set; }
        public double? Value { get; set; }
    }

    [Test]
    public void SomeTest()
    {
        var targetDay = new DateTime(2013, 1, 1);
        var monthlyConsumptions = new List<MonthlyConsumption>();
        monthlyConsumptions.Add(new MonthlyConsumption
            {
                Unit = "first",
                DailyConsumptions = new List<DailyConsumption>
                    {
                                new DailyConsumption { Day = new DateTime(2013, 1, 1), Value = 5 },
                                new DailyConsumption { Day = new DateTime(2013, 1, 5), Value = 100 }
                    }
            });
        monthlyConsumptions.Add(
            new MonthlyConsumption
                {
                    Unit = "second",
                    DailyConsumptions =
                        new List<DailyConsumption>
                            {
                                new DailyConsumption { Day = new DateTime(2013, 1, 1), Value = 2 },
                                new DailyConsumption { Day = new DateTime(2013, 1, 5), Value = 1 }
                            }
                });

        var result =
            monthlyConsumptions.OrderBy(
                x =>
                x.DailyConsumptions.Where(y => y.Day.Date == targetDay.Date).Select(
                    z => (!z.Value.HasValue ? 0 : z.Value.Value)).SingleOrDefault()).ToList();

        Assert.AreEqual("second", result[0].Unit);
    }
}

如您所见,Assert确认确实第二项放在第一位,因为“第二”的1月1日值比“第一”的值低。

45码

与哪些运算符>>兼容 - java

我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

>> Python中的运算符 - python

>>运算符做什么?例如,以下操作10 >> 1 = 5有什么作用? 参考方案 它是右移运算符,将所有位“右移”一次。二进制10是1010移到右边变成0101这是5

Python 3运算符>>打印到文件 - python

我有以下Python代码编写项目的依赖文件。它可以在Python 2.x上正常工作,但是在使用Python 3进行测试时会报告错误。depend = None if not nmake: depend = open(".depend", "a") dependmak = open(".depend.mak&#…

剃刀付款集成->如何通过关闭按钮X检测剃刀付款模型是否关闭 - javascript

当用户关闭而无需付款时,我在CI框架中使用Razorpay,请创建razor支付模型,然后取消订单,我希望按状态更改为已取消的状态触发查询。所以我怎么能检测到这一点。我已经通过单击jQuery单击关闭功能但无法使用... javascript大神给出的解决方案 Razorpay提供了JS方法来检测模式关闭。您编写的任何JS代码都不会在结帐页面上运行,因为它是…

做什么->在python中做什么 - python

我今天看到了一个python示例,它使用了->例如,这就是我所看到的:spam = None bacon = 42 def monty_python(a:spam,b:bacon) -> "different:": pass 该代码在做什么?我不太确定我以前从未看过像这样的代码,但我真的没有得到什么 a:spam,b:baco…