使用LINQ查找价格最便宜的产品? [英] use LINQ to find the product with the cheapest value?

查看:84
本文介绍了使用LINQ查找价格最便宜的产品?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习LINQ,我想从以下列表中找到最便宜的产品:

Im learning LINQ and I want to find the cheapest product from the following list:

List<Product> products = new List<Product> { 
                new Product {Name = "Kayak", Price = 275M, ID=1}, 
                new Product {Name = "Lifejacket", Price = 48.95M, ID=2}, 
                new Product {Name = "Soccer ball", Price = 19.50M, ID=3}, 
            };

我想出了以下几点,但是以某种方式,这似乎不是最好的方法:

I have come up with the following but somehow it feels like it is not the best way to do it:

var cheapest = products.Find(p => p.Price == products.Min(m => m.Price));

您能告诉我实现此目标的正确方法吗?

can you show me the right way to achieve this.

推荐答案

您应使用MinBy:

public static TSource MinBy<TSource>(
    this IEnumerable<TSource> source,
    Func<TSource, IComparable> projectionToComparable
) {
    using (var e = source.GetEnumerator()) {
        if (!e.MoveNext()) {
            throw new InvalidOperationException("Sequence is empty.");
        }
        TSource min = e.Current;
        IComparable minProjection = projectionToComparable(e.Current);
        while (e.MoveNext()) {
            IComparable currentProjection = projectionToComparable(e.Current);
            if (currentProjection.CompareTo(minProjection) < 0) {
                min = e.Current;
                minProjection = currentProjection;
            }
        }
        return min;                
    }
}

只需将此作为方法添加到public static类(EnumerableExtensions?)中即可.

Just add this as a method in a public static class (EnumerableExtensions?).

现在你可以说

var cheapest = products.MinBy(x => x.Price);

这篇关于使用LINQ查找价格最便宜的产品?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆