基于两个属性从列表中检索多个对象

本文关键字:检索 对象 列表 于两个 属性 | 更新日期: 2023-09-27 18:16:50

我有一个对象列表,它有三个属性(名称、严重性和出现次数(。我需要检索所有与最高严重性匹配的名称,然后检索该严重性中出现的最高名称。

因此,给定一个列表,例如:

Name:   Sev:   Occ:
Foo     3      2
Bar     2      3
Foobar  2      3

我希望能回到福。

给定一个列表,例如:

Name:   Sev:   Occ:
Foo     3      3
Bar     3      3
Foobar  2      4

我希望能回到Foo酒吧。

我想重要的是要注意,我只需要返回名称,而且由于对象列表相对较小,我不关心多个循环。。。除了每次在表单上更改值时都会运行。

我承认我的林服实在不够用。到目前为止,我已经尝试过使用morelinq和两次传球。。。

 List<Offenders> offenderList = new List<Offenders>();
// offenderList.Add appropriate data objects
var offSev = offenderList.MaxBy(x => x.Severity);
var offOcc = offSev.MaxBy(x => x.Occurrence);

我希望有一个列表(offOcc(,其中只有我想要的记录,然后我可以迭代报表的.Names属性。相反,我得到的是一个错误:"罪犯"在第二个语句中没有包含"MaxBy"的定义。

基于两个属性从列表中检索多个对象

将您的第一条语句更改为:

var offSev = offenderList.MaxBy(x => x.Severity).ToList();

简单,试试这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Offenders> offenderList = new List<Offenders>() {
                new Offenders() { name = "Foo", sev = 3, occ = 3},
                new Offenders() { name = "Bar", sev = 3, occ = 3},
                new Offenders() { name = "Foobar", sev = 2, occ = 4}
            };
            var results = offenderList.GroupBy(x => new { x.sev, x.occ }).OrderByDescending(x => x.Key.sev).ThenByDescending(x => x.Key.occ).FirstOrDefault();
            Console.WriteLine(string.Join(",",results.Select(x => x.name).ToArray()));
            Console.ReadLine();
        }
    }
    public class Offenders
    {
        public string name { get; set; }
        public int sev { get; set; }
        public int occ { get; set; }
    }
}