【问题标题】:Sorting a list by different type of list property按不同类型的列表属性对列表进行排序
【发布时间】:2019-08-07 10:21:42
【问题描述】:

我有两个不同类型的列表。

列表类型为ProductPackageRelationPackage。我想使用ProductPackageRelation 列表和Sequence 属性对Package 列表进行排序。

将用于排序标准:

public class ProductPackageRelation : BaseDTO
{
    public int PackageID { get; set; }
    public int ProductID { get; set; }
    public int Sequence { get; set; }  // This is the sorting property
}

将排序:

public class Package : BasePackage
{
    public int GuideID { get; set; }
}

这是我的清单:

var productPackageRelationList = _iPackageService.GetRelations();
var packageList = _iPackageService.GetPackages();


// Example ProductPackageRelationList
ID  ProductID   PackageID   Sequence
1      5            1         3
2      5            2         2
3      5            3         5
4      5            4         4
5      5            5         1



// Example PackageList
ID  GuideID
1     1
2     2
3     3
4     4
5     1

packageList 变量将按productPackageRelationList 变量的Sequence 属性排序。

如何排序?

【问题讨论】:

  • 它不是很清楚你想要实现什么,但你可能想使用 IEqualityComparer:docs.microsoft.com/en-us/dotnet/api/…
  • 我尝试像 packageList.OrderBy(p => SOME_CONDITION) 那样对 packageList 进行排序。条件必须包含序列属性的 productPackageRelationList。您可以查找示例序列数据。
  • 给定packageList 中的一个项目,你如何找到它关联的Sequence?这是解决这个问题的基础。 packageList中的item和productPackageRelationList中的item是什么关系?
  • @MatthewWatson ProductPackageRelation 类具有 PackageID。这个 PackageID 属性实际上是 Package 类的“ID”属性

标签: c# linq sorting


【解决方案1】:

加入列表,然后按Sequence 订购:

var q = from p in packageList
        join r in productPackageRelationList on p.Id equals r.PackageID
        orderby r.Sequence
        select p;

【讨论】:

    【解决方案2】:

    加入列表并订购:

    var q = (from p in packageList
            join r in productPackageRelationList on p.Id equals r.PackageID     
            select p).OrderBy( i => i.Sequence);
    

    或 OrderByDescending() 如果你想倒置

    【讨论】:

      猜你喜欢
      • 2015-09-21
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多