来自ObservableCollection的Linq最大值

时间:2019-06-04 17:34:10

标签: c# linq max

我有一个带有两个属性字符串和整数的ObservableCollection。我想查询并返回具有最大值的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);`

2 个答案:

答案 0 :(得分:1)

如果您只想为所选WorkOrderVersion获得最大的Category,则可以使用Max将其返回:

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

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

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

答案 1 :(得分:0)

如果您想在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界面通知更改。