使用项目的其他属性值搜索列表项属性

时间:2014-07-04 07:57:37

标签: c# linq list object

我有一个这样的课程:

class item   
{
    public string itemID { get; set; }
    public string itemName { get; set; }
    public decimal itemPrice{ get; set; }
}

我有这样的清单:

List<item> myItems = new List<item>();

我想以最低价格获得商品的ID。

我得到这样的最低价格:

var minprice = myItems.Min(itemobj => itemobj.itemPrice);

如何获取具有最低价格的对象的物品ID?或者换句话说,对象的itemID是:

itemPrice == minprice;

2 个答案:

答案 0 :(得分:3)

试试这个:

尝试获取整个项目

var minPriceItem = myItems.OrderBy(i => i.itemPrice).FirstOrDefault();

然后只使用它的属性:

decimal price = minPriceItem.itemPrice;

string id = minPriceItem.itemID;

答案 1 :(得分:2)

我可能会这样做:

var minprice = myItems.Min(itemobj => itemobj.itemPrice);
// use .First instead of .Single in case there are 2 or more items with the same min price
// use .FirstOrDefault instead of .First in case the sequence is empty
var itemWithMinPrice = myItems.FirstOrDefault(itemobj => itemobj.itemPrice == minprice);

如果您想要所有物品的最低价格:

var itemsWithMinPrice = myItems.Where(itemobj => itemobj.itemPrice == minprice);

您也可以使用聚合函数

进行高级操作
var itemWithMinPrice = myItems.Aggregate((cheapestItem, nextItem) => (cheapestItem == null || cheapestItem.itemPrice > nextItem.itemPrice) ? nextItem : cheapestItem);

或者你可以使用MoreLinq(我可以推荐这个,MoreLinq太棒了)

var itemWithMinPrice = myItems.MinBy(itemobj => itemobj.Price);