我试图得到一个Max值(SecKey),因为Linq结果给我第一个值的项目之一我有一个空值(在这种情况下它是40)。 SecKey值应为200.如何解决此问题?
我试过这个
SecKey = groupedList.Max(d => string.IsNullOrEmpty(d.SecKey) ? "0" : d.SecKey)
但没用!
var newData = from list in myList
group list by new { list.BadgeNum, list.ActiveDate, list.EndDate }
into groupedList
select new
{
groupedList.Key.BadgeNum,
groupedList.Key.ActiveDate,
groupedList.Key.EndDate,
Amount = groupedList.Sum(a => a.Amount)
SecKey = groupedList.Max(d => d.SecKey)
};
这是我在myList中的数据
BadgeNum ActiveDate EndDate Amount SecKey
722711 1/1/2014 1/31/2014 10 40
722711 1/1/2014 1/31/2014 10
722711 1/1/2014 1/31/2014 70 200
当前输出:
BadgeNum ActiveDate EndDate Amount SecKey
722711 1/1/2014 1/31/2014 90 40
预期输出:
BadgeNum ActiveDate EndDate Amount SecKey
722711 1/1/2014 1/31/2014 90 200
答案 0 :(得分:5)
这不会发生,因为您在列表中有null
- Max
会忽略它们。
问题在于,您SecKey
使用的数据类型会在40
之前排序200
。例如,如果您使用SecKey
字符串,则可能会发生这种情况,在这种情况下,'200'
将按字典顺序早于而不是'40'
。
如果您无法控制数据类型,则可以解决此问题,方法是按升序排序您的组,并按升序排序int
,并采用最后一个元素(或按降序排序并取第一个元素元素),像这样:
SecKey = groupedList.OrderBy(d => Convert.ToInt32(d.SecKey)).Last().SecKey;