从列表中获取最小值

时间:2015-07-08 12:20:07

标签: asp.net asp.net-mvc-3 c#-4.0

我有类ABC这样的

public class ABC{
public int Id {get;set;}
public int UserCount {get;set;}
}

现在我将以下记录添加到ABC

类型的列表中
List<ABC> lstABC = new List<ABC>();
lstABC.Add(new ABC(){Id=1,UserCount=5});
lstABC.Add(new ABC(){Id=2,UserCount=15});
lstABC.Add(new ABC(){Id=3,UserCount=3});
lstABC.Add(new ABC(){Id=4,UserCount=20});

我还有另一个int

类型的列表
List<int> lstIds = new List<int>();
lstIds.Add(1);
lstIds.Add(3);
lstIds.Add(4);

现在,我想通过比较UserCountId应与lstABC中的商品相匹配的列表来找出lstIds的最小值。我可以通过循环获得UserCount的最小值,但有没有其他方法可以通过避免循环以优化的方式获取值?

2 个答案:

答案 0 :(得分:1)

您可以使用Enumerable.Join链接两个列表:

var joined = from id in lstIds
             join x in lstABC 
             on id equals x.Id 
             select x;
int minValue = joined.Min(x => x.UserCount);

这比循环更有效,因为Join使用集合来查找匹配的项目。

有一种方法可以给猫皮肤,这效率稍低:

int minValue = lstABC.Where(x => lstIds.Contains(x.ID)).Min(x => x.UserCount);

答案 1 :(得分:0)

尝试以下代码:

        int min = lstABC.Min(entry => entry.UserCount);
        var a = lstABC.Where(e => e.UserCount == min).FirstOrDefault();
        var resul = lstIds.Where(e => e.Equals(a.Id)).FirstOrDefault();
        var result = lstABC.Where(n =>n.Id == resul).FirstOrDefault();