我有类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);
现在,我想通过比较UserCount
中Id
应与lstABC
中的商品相匹配的列表来找出lstIds
的最小值。我可以通过循环获得UserCount
的最小值,但有没有其他方法可以通过避免循环以优化的方式获取值?
答案 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();