2008-10-01 85 views

回答

76
 using (DataContext dc = new DataContext()) 
     { 
      var q = from t in dc.TableTests 
        group t by t.SerialNumber 
         into g 
         select new 
         { 
          SerialNumber = g.Key, 
          uid = (from t2 in g select t2.uid).Max() 
         }; 
     } 
+1

我想接受這兩個答案,但我想我不能所以我投票給你們兩個。感謝BUNCH !!! – 2008-10-01 16:33:27

58
var q = from s in db.Serials 
     group s by s.Serial_Number into g 
     select new {Serial_Number = g.Key, MaxUid = g.Max(s => s.uid) } 
+0

我想接受這兩個答案,但我想我不能,所以我投票給你們兩個。 感謝BUNCH !!! – 2008-10-01 15:08:21

+0

另請注意,Max函數中的=> lambda表達式的變量可以是任何值(s => s.uid,tv => tv.uid,asdf => asdf.uid)。 Linq會自動將它識別爲選擇Serial類型的元素。 – Michael 2011-03-17 17:03:45

21

我檢查DamienG在LinqPad答案。相反

g.Group.Max(s => s.uid) 

g.Max(s => s.uid) 

謝謝!

+1

upvoted for more extra effort in checking this – Michael 2011-03-17 16:44:43

11

在方法鍊形式:

db.Serials.GroupBy(i => i.Serial_Number).Select(g => new 
    { 
     Serial_Number = g.Key, 
     uid = g.Max(row => row.uid) 
    }); 
5

的答案是確定的,如果你只需要這兩個領域,但對於更復雜的對象,也許這種方法可能是有用的:

from x in db.Serials 
group x by x.Serial_Number into g 
orderby g.Key 
select g.OrderByDescending(z => z.uid) 
.FirstOrDefault() 

。 ..這將避免「選擇新的」