2009-10-07 20 views
13

Sözdiziminde basit bir şeyleri kaçırmış olabilir gibi görünüyor, ancak FirstNameDefault sonuçlarını bir linq ifadesinden doğrudan IEnumerable'ı geçici bir değişkende saklamak zorunda kalmadan almak istiyorum. Böyle bir şey:FirstOrDefault davranışı doğrudan LINQ deyiminde

var bestCar = from c in cars 
       orderby c.Price 
       select first c 

ben ilk kelime var aslında değil ama yapacak istediğim şey göstermektedir biliyorum. Ayrıca biliyorum ... parantez içinde select deyimi sarmak ve doğrudan FirstOrDefault çağrı ama yukarıdaki sözdizimi daha temiz ve daha kolay olduğunu düşünüyorum.

+0

Sorunuz tam olarak nedir? –

cevap

23

Enumerable.FirstOrDefault karşılık gelen bir LINQ sözdizimi elemanına sahip değildir Enumerable sınıfının uzantı yöntemlerden biridir. Bu yönteme bağlanmak için tek yol, yöntem çağrısı sözdizimi yoluyla.

Sen follownig

var bestCar = (from c in cars 
       orderby c.Price 
       select c).FirstOrDefault(); 
+0

Bu, 'FirstOrDefault()' nin bir örneği olarak ifade edilmesine rağmen, siparişin asimptotik olarak "MaxBy (c => c.Price)' den daha düşük olduğu için, böyle bir numaralandırmanın zaten sipariş verildiğini varsaymak en iyi yoldur. –

3

    var bestCar = (from c in cars 
       orderby c.Price 
       select c).FirstOrDefault(); 

Sorunuzu tamamen okumadım, bu tam olarak yapmak istemediğiniz şeyler olabilir.

4
var bestCar = (from c in cars 
      orderby c.Price 
      select c).FirstOrDefault() 

TD

var bestCar = cars.OrderBy(c => c.Price).FirstOrDefault() 
7

Bunu yapmanın bir yolu yoktur yaparak geçici önleyebilirsiniz. LINQ bir sorguyu tanımlamak için kullanılır. Bunu yapmak aslında bir değerlendirmeye neden olmazken, FirstOrDefault (veya üzerinde numaralandırılıyor) çalıştırıldığında, sorgu yürütülür.