获取数据子集中的第一个值

时间:2013-02-15 18:54:35

标签: linq lambda

我从LINQ语句返回结果,如下所示:

 Id dataId dataVal 
 A  1      1000 
 A  2      2000 
 A  3      3000 
 A  3      3001 
 A  3      3002

我想要的是获得第一项(dataId = 3和dataVal = 3000)

这是我的查询产生上述结果:

        var myIds = myList
            .Where(a => ListIds.Contains(a.dataId))
            .Select(x=> new 
            {
                Id = x.Id,
                DataId = x.dataId,
                DataValue = x.DataValue
            }).ToList().Distinct();

我是否需要进行分组或是否有更简单的方法?

2 个答案:

答案 0 :(得分:3)

dataId对项目进行分组,然后从每个组中选择第一项:

var myIds = (from a in myList
             where ListIds.Contains(a.dataId)
             group a by a.dataId into g
             let firstA = g.OrderBy(x => x.DataValue).First()
             select new {
                Id = firstA.Id,
                DataId = g.Key,
                DataValue = firstA.DataValue
             }).ToList();

或者使用扩展方法(它以原始顺序返回第一个项目):

var myIds = myList
        .Where(a => ListIds.Contains(a.dataId))
        .GroupBy(a => a.dataId)
        .Select(g => new 
        {
            Id = g.First().Id,
            DataId = g.Key,
            DataValue = g.First().DataValue
        }).ToList();

答案 1 :(得分:1)

在选择

后使用.FirstOrDefault()
 var myIds = myList
                .Where(a => ListIds.Contains(a.dataId))
                .Select(x=> new 
                {
                    Id = x.Id,
                    DataId = x.dataId,
                    DataValue = x.DataValue
                }).FirstOrDefault();