【问题标题】:Sorting and grouping a list by order number and created date按订单号和创建日期对列表进行排序和分组
【发布时间】:2022-12-22 05:33:04
【问题描述】:

我坚持如何将列表分类为具有不同结构的新列表,如果有人可以帮助我解决这个问题。

先感谢您。

列表类型

public class PartOrders
{
    public string orderNumber{ get; set; }
    public DateTime createdDate { get; set; }
    public string description { get; set; }
    public string name{ get; set; }
    public DateTime performedDateTime { get; set; }
    public Category category { get; set; }
}

public class Category 
{
    public string type { get; set; }
    public string Name { get; set; }
}

列表中有许多具有相同 orderNumber 和 createdDate 的项目

我的问题是如何使用 type 制作新列表:

public class PartOrders
{
    public string orderNumber { get; set; }
    public DateTime createdDate { get; set; }
    public List<Data> orderDate { get; set; }
} 

public class Data
{
    public string description { get; set; }
    public string name { get; set; }
    public DateTime performedDateTime { get; set; }
    public Category category { get; set; }
}

我感谢您的帮助

我尝试用 readinonal 方式循环 foreach 和 if 条件,但它非常复杂和缓慢。

结果需要采用以下格式:

【问题讨论】:

  • “分类”听起来很奇怪。这是两个不同的问题,您可能会因为试图将它们视为一个问题而过得很辛苦?首先将您的两个列表移动到 List<RestOfData> 中,然后对该列表进行排序。
  • 谢谢你的评论拉尔夫。我正在考虑通过循环抛出这两个列表并将结果保存在 Ordered List 类型的新列表中来查找 LINQ 查询
  • 看起来 List1 模型与 List2 模型无关,那么如何将这两个模型结合到 RestOfData 模型呢?
  • 你好@Yiyi 你,List1 和 List2 中的 Id 和 createdDate 在模型中是相同的,所以我的问题是如何在 OrderedList 中获取一个 id 和 createdDate 以及如何在 List<RestOfData> 中作为列表获取常见项目列表,谢谢

标签: c# asp.net-mvc asp.net-core


【解决方案1】:

你最好像这样更改你的 RestOfData,并使用 List&lt;RestOfData&gt; 替换 OrderedList

 public class RestOfData
{
            public string id { get; set; }
            public DateTime createdDate { get; set; }
            public string descriptionA { get; set; }
            public string name{ get; set; }
            public DateTime performedDateTime { get; set; }
            public Gender genderA{ get; set; }
            public string codeData{ get; set; }
            public string descriptionB { get; set; }
            public string orderNumber { get; set; }
            public float total{ get; set; }
            public Gender genderB { get; set; }
}

然后使用:

List<List1> l = ...;
List<List2> l1 = ...;
List<RestOfData> datalist = (from a in l
                          join b in l1 on a.id equals b.id
                          select new RestOfData()
                          {
                              id=a.id,
                              createdDate=a.createdDate,
                              descriptionA=a.descriptionA,
                              name=a.name,
                              performedDateTime=a.performedDateTime,
                              genderA=a.genderA,
                              codeData=b.codeData,
                              descriptionB=b.descriptionB,
                              orderNumber=b.orderNumber,
                              total=b.total,
                              genderB=b.genderB
                          }).OrderBy(xxx).ToList();

【讨论】:

  • 伟大的依依你:),解决了一半的问题,最终列表将是 List<orderedData> class class orderedData { public string id { get;放; } public DateTime createdDate { get;放; } 公共列表<数据> 数据{ 得到;放; } } class class Data { public string descriptionA { get;放; } 公共字符串名称{ get;放; } 。 . .其中每个 orderedData 项目都有 id 、 createdDate 和具有相同 id 和 orderedDate 的数据列表。
  • 你不应该在你的orderedData中使用一个列表。id 应该是唯一的,所以只有一个Data 用于 id,而不是用于 id 的列表。
  • 你好 Yiyi 你,也许我没有把我的问题写清楚,我编辑了代码所以你可以看看吗
【解决方案2】:

看来您的“列表”并不是真正的列表,而是数据对象或结构。 我要做的第一件事是为它们必须实现的两个对象创建一个接口。 然后你就可以

List1<ICommonInterface>.Concat(List2<ICommonInterface>).OrderBy(etc..).ThenBy(etc..)

两个都。

【讨论】:

  • 感谢 Horst,我正在尝试使用具有相同 ID 的项目对 List<List1> 和 List<List2> 进行排序,以创建具有 id 和 createdDate 和 List<RestOfData> 的新 List<OrderedList>
猜你喜欢
  • 2015-09-28
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
相关资源
最近更新 更多