2008-12-17 15 views
5

Ben böyle bir şey yaptığını, bazı Linq SQL şeylerle etrafında oynuyorum: ince ve züppe hepsiRefactor, Linq ifadesinin bir bölümünü seçiyor mu?

var foo = from f in db.Foo where f.Bar > 5 select f; 

ve ben de bunu biliyorum:

var foo = from f in db.Foo where f.Bar > 5 select new { f.Bar, f.Baz }; 

neler Ben bilmek istiyorum, ben ne zaman çalışma zamanı belirlemek için Foo seçmek için seçerseniz, bu sorgunun seçkin bölümünü faktörü olabilir mi? Mesela:

var foo = from f in db.Foo where f.Bar > 5 select SomeMethodThatReturnsThePropertiesOfFooIReallyWant(); 

Düzenleme netleştirmek için: Ben birYöntem sözdizimi ve dönüş türü arıyorum ...().

select new { f.Bar, f.Baz }; 

ama diğer zamanlarda bunu: Bazı zamanlar bunu yapmak istiyorsa

(dev vaka deyimi yapmadan) bellekte verilere dayanarak

select new { f.Baz, f.Other }; 

, nasıl olur Mümkünse bunu yap.

cevap

2

o akıcı sözdiziminde kolay olsa Tabii,:

var query_foo = db.Foo.Where(f=>f.Bar > 5); 
// : 
var foo =query_foo.Select(f=>SomeMethodThatReturnsEtc(f)); 
+0

Sanırım asıl sorum, SomeMethod() 'ın sözdizimi nedir? – Jonas

+0

SomeMethodThatReturnsEtc'in dönüş tipi nedir? –

0

Ben ) birYöntem sözdizimi (ne, benim gerçek soru şu? - Jonas (Bir saat önce)

bunu yapmak istediğim gibi, sadece yönteminden "nesne" döndürebilir.

0

bir fonksiyonun anonim türleri döndüremez dinamik sorgu örneğinde

Dynamic.cs: Bazı örnekler için aşağıdakilerden birini gör Sorunuza karşı çıkan bildirilen türlerle veya çok yardımcı olmayacak olan Object ile.

Sonuç olarak, sonuçlarınızla tam olarak ne yapmayı düşünüyorsunuz? Eğer üyeler gerçekten derleme zamanında bilinmiyorlarsa, bununla ne yapabileceğinizden emin değilim ...

0

Bazen yapılması gereken en kolay şey, bir grup kamuoyuyla basit bir veri sınıfı oluşturmak; ve set; Böylece verilerinizi bu sınıfa seçebilirsiniz. Verileri tükettiğinizde oldukça net olan nullable türlerle uğraşıyorsanız, tüm dizeler olsa bile, verileri tüketme zamanı geldiğinde başka bir şey daha temiz bulabilirsiniz. Eğer numaralandırmak çalıştığınızda

Eğer select deyimi daha farklı bir yerde seçme olmasını istiyorsanız da bu gibi ifadeleri dışarı ayırabilirsiniz

public class MyData { 
public string Bar {get;set;} 
public int? Baz {get;set;} 
public DateTime? {get;set;} 
} 

var foo = from f in db.Foo where f.Bar > 5 select new MyData { Bar = f.Bar, Foo = f.Foo }; 

Basit bir örnek, bu sadece sunucu vuracak o.

var foo = from f in db.Foo where f.Bar > 5 select f; 
var fooData = f.Select(new MyData .... } 
İlgili konular