基于两个属性从列表中检索多个对象
本文关键字:检索 对象 列表 于两个 属性 | 更新日期: 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; }
}
}