2009-10-09 16 views
8

benim kodudur: Simple Linq question: Birden fazla sütun nasıl seçilir?

  List<Benutzer> users = (from a in dc.Benutzer 
            select a).ToList(); 

bu kodu gerekir ama sadece "Benutzer" -Masa 20. Kolonların 3 seçmek istiyor. Bunun için sözdizimi nedir?

+1

"Benutzer" yazdınız mı? Hiç yerelleştirilmiş C# kullanmayı düşündünüz mü? Liste benutzer = (aus a in a dc.Benutzer a a) .ZuListe(); ';) –

cevap

20

İşte sorgu ifadesi var:

var users = (from a in dc.Benutzer 
      select new { a.Name, a.Age, a.Occupation }).ToList(); 

Veya nokta gösterimde: Bu oldukça Benutzer örnekleri daha bir anonymous type bir listesini döndürür

var users = dc.Benutzer.Select(a => new { a.Name, a.Age, a.Occupation }) 
         .ToList(); 

Not. Şahsen, bu yaklaşımı kısmen nüfuslu örneklerin bir listesini oluşturmaya tercih ediyorum, o zaman kısmi örneklerle ilgilenen herkes, gerçekten orada ne olacağını öğrenmek için gelip gelmediklerini kontrol etmek zorundadır.

DÜZENLEME: Gerçekten Benutzer örneklerini inşa etmek istiyor ve LINQ bir sorguda bunu icar değilse her zaman yapabileceği (Neden emin değilim):

List<Benutzer> users = dc.Benutzer 
    .Select(a => new { a.Name, a.Age, a.Occupation }) 
    .AsEnumerable() // Forces the rest of the query to execute locally 
    .Select(x => new Benutzer { Name = x.Name, Age = x.Age, 
           Occupation = x.Occupation }) 
    .ToList(); 

yani kullanım Anonim tip sadece bir DTO olarak. Geri verilen Benutzer nesnelerinin bir bağlamla ilişkilendirilmeyeceğini unutmayın.

+1

Nasıl yazabilirim? – Kovu

+2

"typisite" ile ne demek istiyorsun? –

+1

Türün Benutzer olmasını istiyorum, anonim değil. – Kovu

4
List<Benutzer> users = (from a in dc.Benutzer 
          select new Benutzer{ 
          myCol= a.myCol, 
          myCol2 = a.myCol2 
          }).ToList(); 

Aynı türde bir liste yapmak istiyorsanız, istediğinizi düşünüyorum. Ancak bu, belirlediğiniz özelliklerin genel belirleyiciler olduğunu varsayar.

+1

Bir hata alıyorum, orada" Benutzer "kullanamıyorum. – Kovu

+1

Alanları birbirinden ayırmak için virgül kullanmalısınız, bunun nedeni bu yüzden – qui

+1

'u kırmaktan şüpheliyim, çünkü çok benzer bir kullanım durumunda makinemde denedim ve işe yaradı. Tam hatayı yapıştırır mısın? – qui

1

deneyin:

var list = (from a in dc.Benutzer select new {a.Col1, a.Col2, a.Col3}).ToList(); 

ama şimdi değil Benutzer nesnelerin anonim nesnenin listesi var.

İlgili konular