1

我从 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();

我需要做一些分组还是有更简单的方法?

4

2 回答 2

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();
于 2013-02-15T18:58:02.913 回答
1

在 Select 之后使用 .FirstOrDefault()

 var myIds = myList
                .Where(a => ListIds.Contains(a.dataId))
                .Select(x=> new 
                {
                    Id = x.Id,
                    DataId = x.dataId,
                    DataValue = x.DataValue
                }).FirstOrDefault();
于 2013-02-15T18:58:18.763 回答