C# 使用LINQ查询中的Max-列表中的null值
我正在尝试获取一个最大值(SecKey),因为我有一个空值用于Linq结果给我的第一个值(在本例中是40)。SecKey值应为200。我该如何解决这个问题 我试过这个C# 使用LINQ查询中的Max-列表中的null值,c#,linq,C#,Linq,我正在尝试获取一个最大值(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, lis
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)
};
这是我的列表中的数据
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
预期输出:
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
这不会发生,因为列表中有
null
s-Max
将忽略它们
问题是,您用于SecKey
的数据类型排序40
优先于200
。例如,如果将字符串用于SecKey
,则在这种情况下,'200'
在词汇上比'40'
来得早
如果您无法控制数据类型,则可以通过以下方式解决此问题:按升序将组按强制转换为int
,并取最后一个元素(或按降序排序并取第一个元素),如下所示:
SecKey = groupedList.OrderBy(d => Convert.ToInt32(d.SecKey)).Last().SecKey;
这不会发生,因为列表中有
null
s-Max
将忽略它们
问题是,您用于SecKey
的数据类型排序40
优先于200
。例如,如果将字符串用于SecKey
,则在这种情况下,'200'
在词汇上比'40'
来得早
如果您无法控制数据类型,则可以通过以下方式解决此问题:按升序将组按强制转换为int
,并取最后一个元素(或按降序排序并取第一个元素),如下所示:
SecKey = groupedList.OrderBy(d => Convert.ToInt32(d.SecKey)).Last().SecKey;
SecKey是字符串类型还是数字类型?是否尝试过:SecKey=groupedList.Max(d=>d.SecKey)?SecKey是字符串类型还是数字类型?是否尝试过:SecKey=groupedList.Max(d=>d.SecKey)?有意义。。让我更改数据类型以使其有意义。。让我更改数据类型