2008-10-01 15 views

cevap

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

kaçınmak istiyorum Her iki yanıt olarak kabul etmek istiyorum, ama sanırım ben her ikisi de için oy veremem. Çok teşekkürler!!! –

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

İkisini de cevap olarak kabul etmek istiyorum ama sanırım ben de ikiniz için oy veremedim. Teşekkürler BUNCH !!! –

+0

Ayrıca Max işlevindeki => lambda ifadesinin değişkeni bir şey olabilir (s => s.uid, tv => tv.uid, asdf => asdf.uid). Linq, otomatik olarak Serial tipindeki elemanların seçilmesi olarak tanıyacaktır. – Michael

21

Ben LINQPad içinde DamienG yanıtını kontrol ettik. yerine

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

ait

g.Max(s => s.uid) 

teşekkür ederiz olmalı! yöntemler zincir formunda

+1

, bu – Michael

+7

numaralı telefonu kontrol etmedeki ekstra çaba için tahsis edilmiştir Bu muhtemelen DamienG'nin cevabı hakkında bir yorum yapmalıdır. –

11

: Yalnızca bu iki alan gerektiriyorsa

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

yanıtları yeterli olmakla birlikte, daha karmaşık bir nesne için, belki bu yaklaşım yararlı olabilir:

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

. .. bu "yeni seçin"

+0

Bunu sevdim - diğer cevaplar kadar verimli olup olmadığını biliyor musunuz? – noelicus

+0

Sorgu sözdizimini burada sonuna kadar sonuna kadar kullandınız, burada yöntem sözdizimine geçtiniz. Zorunda mıydınız Çözümünüz için tam bir sorgu sözdizimi formu mu? – Seth