2012-02-01 27 views
1

我有一个列表(mainlist)具有以下LINQ得到第一个值在给定列表

PsID Nominprsn 
---- --------- 
1  James 
2  Troy 
2  William 
3  Mike 
4  Jason 
4  Hendry 

我需要从一个给定的PsID 获得头名,因此结果会是这样

PsID Nominprsn 
---- --------- 
1  James 
2  Troy 
3  Mike 
4  Jason 

我尝试以下,但没有成功,因为我不知道如何获得第一PsID

var proglis = (from ts in mainlist 
       group ts by new { ts.PsID, Nominprsn} into grp 
       select new {grp.Key.PsID grp.Key.Nominprsn}).ToList(); 
+0

这是什么不同于[你的问题在这里](http://stackoverflow.com/questions/9088608/linq-join-1-to-many-get-first-record)? – 2012-02-01 15:02:43

回答

2

要选择从每个组使用的第一项此查询:

var query = mainlist.GroupBy(o => o.PsID) 
        .Select(g => new { PsID = g.Key, g.First().Nominprsn }) 
        .ToList(); 

这将返回与您在问题中显示的结果相同的结果。结果将为名为PsIDNominprsn的匿名类型的IEnumerable

1

这里是你应该怎么做:

var proglis = (from ts in mainlist 
       group ts by ts.PsID into grp 
       select new 
       { 
       Id = grp.Key, 
       Name = grp.First().Nominprsn 
       }).ToList(); 
+0

如果您像这样使用'FirstOrDefault',如果列表中没有项目,您将得到一个NullReferenceException。 – Ray 2012-02-01 15:21:00

+0

@射线因为它是组,所以组中总有元素,否则组不会存在。如果mainlist为空,它也不会给NullReferenceException,因为不会有组。我试过了,它工作正常。你能给我举一些例子,它抛出NullReferenceException吗? – 2012-02-01 15:24:02

+1

我刚才谈到'FirstOrDefault()。Member'的一般情况。在你的情况下,你应该使用'First()'。 – Ray 2012-02-01 15:28:29

0

也许尝试不同的或DistinctBy(O => o.Key.PsID)

相关问题