C# 从集合中选择最小值以包含重复项

C# 从集合中选择最小值以包含重复项,c#,linqpad,C#,Linqpad,我收集了4件物品。我想找到tottprig最低的DutPdSeqNum以包含重复项 我想生成一个linq查询,查找最小值的项目编号。此查询应返回一个列表 如果存在重复项(如上所示),则应包括等于最小值的所有重复项目编号。查询应返回一个列表 查询应该返回一个int列表,列表中有DutPdSeqNum 2和3 List<DutPdItem> dutPdItemList = new List<DutPdItem>(); DutPdItem dutPd1 = new DutPd

我收集了4件物品。我想找到tottprig最低的DutPdSeqNum以包含重复项

我想生成一个linq查询,查找最小值的项目编号。此查询应返回一个列表

如果存在重复项(如上所示),则应包括等于最小值的所有重复项目编号。查询应返回一个列表

查询应该返回一个int列表,列表中有DutPdSeqNum 2和3

List<DutPdItem> dutPdItemList = new List<DutPdItem>();

DutPdItem dutPd1 = new DutPdItem()
{
    DutPdSeqNum = 1,
    FltTfpTot = 6.4m,
    RigDpMin = 0.0m,
    RigDhr = 0.0m,
    RigAdg = 0.0m,
    RigThr = 0.0m
};
DutPdItem dutPd2 = new DutPdItem()
{
    DutPdSeqNum = 2,
    FltTfpTot = 4.0m,
    RigDpMin = 0.0m,
    RigDhr = 1.55m,
    RigAdg = 0.0m,
    RigThr = 0.0m
};

DutPdItem dutPd3 = new DutPdItem()
{
    DutPdSeqNum = 3,
    FltTfpTot = 4.0m,
    RigDpMin = 0.0m,
    RigDhr = 1.55m,
    RigAdg = 0.0m,
    RigThr = 0.0m
};
DutPdItem dutPd4 = new DutPdItem()
{
    DutPdSeqNum = 4,
    FltTfpTot = 6.3m,
    RigDpMin = 0.0m,
    RigDhr = 0.0m,
    RigAdg = 0.0m,
    RigThr = 0.0m
};
dutPdItemList.Add(dutPd1);
dutPdItemList.Add(dutPd2);
dutPdItemList.Add(dutPd3);
dutPdItemList.Add(dutPd4);

dutPdItemList.Dump("DutyPeriod Item List");

var THRtoDistribute = 2.715m;

// gets the lowest duty period by total pay

var lowestDutyPeriodsByTotPay = dutPdItemList.GroupBy(x => x.TotTfpRig)
                                .Where(g => g.Count() >= 2)
                                .Select(y => y.Key);

// this query does not work, I cannot figure our why
var lowestDutyPeriod = dutPdItemList.Select(dp => dp.TotTfpRig == 
lowestDutyPeriodsByTotPay);                             


lowestDutyPeriodsByTotPay.Dump("lowest duty period");




}
class DutPdItem
{
    public int DutPdSeqNum { get; set; }
    public decimal FltTfpTot { get; set; }
    public decimal RigDpMin { get; set; }
    public decimal RigDhr { get; set; }
    public decimal RigAdg { get; set; }
    public decimal RigThr { get; set; }
    public decimal TotTfpRig => FltTfpTot + RigDpMin + RigDhr + RigAdg + 
RigThr;
public struct IdAndValue{//示例数据结构
公共int id;
公共双val;
}
静态IEnumerable findAllMinimums(ICollection数据)
{
var byValue=data.ToLookup(d=>d.val);
返回byValue[byValue.Min(grp=>grp.Key)];
}

要获取列表,请执行
findAllMinimums(…).ToList()

此集合是哈希集合还是任何集合?此查询将在集合(列表)上运行。请在此处发布一些示例代码和确切的数据结构好吗?你试过什么?什么不起作用?您面临哪些问题?请在问题中添加其他信息。
。选择(d=>d.id)
var minTfp = dutPdItemList.Min(dp => dp.TotTfpRig).Dump("Min Tfp");

var minDutPd = dutPdItemList.Where(dp => dp.TotTfpRig == minTfp).Select(dp => dp.DutPdSeqNum).ToList().Dump("Min Duty Pds");

var countMin = minDutPd.Count().Dump("count minDutPd");

var secondLowestTfp = dutPdItemList.OrderBy(dp => dp.TotTfpRig).Select(dp => dp.TotTfpRig).Skip(countMin).First().Dump("2nd Lowest Tfp");

var secondLowestDutPd = dutPdItemList.OrderBy(dp => dp.TotTfpRig).Select(dp => dp.DutPdSeqNum).Skip(countMin).First().Dump("2nd Lowest Duty Pd");
    public struct IdAndValue {  // Example data structure
        public int id;
        public double val;
    }

    static IEnumerable<IdAndValue> findAllMinimums(ICollection<IdAndValue> data)
    {
        var byValue = data.ToLookup(d => d.val);
        return byValue[byValue.Min(grp => grp.Key)];
    }