【问题标题】:Linq Max Value from ObservableCollection来自 ObservableCollection 的 Linq 最大值
【发布时间】:2019-11-22 00:25:48
【问题描述】:

我有一个 ObservableCollection,它有两个属性 string 和 int。我想查询并返回具有最大值的 int。

数据示例:

类别,WorkOrderVersion

AAA 1

AAA 2

AAA 3

BBB 1

BBB 2

如果 Category == "BBB" 我想返回 2

这就是我的意思:

var maxWorkOrderVersion = WorkOrderDetailsObsCollection.Where(x=>x.Category == firstSelection.Category) return Max(WorkOrderVersion);`

【问题讨论】:

  • 使用 Select 和 GroupBy,然后对其进行排序或最大
  • 你的意思是WorkOrderDetailsObsCollection.Where(x=>x.Category == firstSelection.Category).Max(x => x.WorkOrderVersion)

标签: c# linq max


【解决方案1】:

如果您只想为选定的Category 获取最大的WorkOrderVersion,那么您可以使用Max 返回它:

int maxWorkOrderVersion = WorkOrderDetailsObsCollection
    .Where(x => x.Category == firstSelection.Category)
    .Max(x => x.WorkOrderVersion);

否则,如果您想要具有最大WorkOrderVersion 的指定Category 的整个对象,则可以按属性对列表进行排序(在过滤Category 之后),然后选择FirstOrDefault 1(不存在指定Category的项目时返回默认值null):

var maxWorkOrderVersion = WorkOrderDetailsObsCollection
    .Where(x => x.Category == firstSelection.Category)
    .OrderByDescending(x => x.WorkOrderVersion)
    .FirstOrDefault();

【讨论】:

    【解决方案2】:

    如果您想在 WorkOrderDetailsObsCollection 更改或 Category 属性更改时收到通知,您可以使用我的 ObservableComputations 库。使用该库,您可以编写代码:

    var maxWorkOrderVersion = WorkOrderDetailsObsCollection
        .Filtering(x=> x.Category == firstSelection.Category)
        .Selecting(x => x.WorkOrderVersion)
        .Maximazing();
    
    // maxWorkOrderVersion.Value is what you need
    

    maxWorkOrderVersion 是 INotifyPropertyChanged。实际值存储在 Value 属性中。确保上面代码中提到的属性通过INotifyPropertyChanged 接口通知更改。

    【讨论】:

      猜你喜欢
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多