如何将“组”Linq查询减少回平坦的IEnumerable?

时间:2013-05-06 00:18:48

标签: linq windows-phone-7

我有一个可查询的对象集合,它有两个相关属性,RetailerPrice。我想为每个零售商选择一个对象(价格最低的对象),然后显示按零售商名称的第一个字母分组的对象列表,例如所有与零售商最低价格对应的对象,以第一组中的字母“A”开头,下一组为“B”等。

一旦我按零售商对Linq查询进行分组,我很难搞清楚如何对对象进行Select查询而不将查询减少到Price属性列表,因此丢失对象的引用,例如

var query = from o in myCollection.Cast<MyObjectType>()
            group o.GetPrice(someParameter) by o.Retailer into oGroup
            select oGroup.Min() // <-- at this point I've 'lost' the objects 
                                //     and just have a list of prices
                                //     I also need to then group the results 
                                //     by o.Retailer.ToString()[0]

我使用的是Windows Phone 7,因此Linq可能会受到限制。

1 个答案:

答案 0 :(得分:1)

所以你只需要一个零售商和最低价格的关键价值对列表? 难道你不能只选择一个匿名类型吗?

var query = from o in myCollection.Cast<MyObjectType>()
            group o.GetPrice(someParameter) by o.Retailer into oGroup
            select new { Retailer = oGroup.Key, Min = oGroup.Min() };

或者您也可以创建自定义类或KeyValuePair。