2009-10-09 39 views
8

mã của tôi là:Câu hỏi LINQ đơn giản: Cách chọn nhiều cột?

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

tôi cần mã này nhưng tôi chỉ muốn chọn 3 trong số 20 Cột trong "Lọc" bảng được. Cú pháp cho điều đó là gì?

+1

Bạn đã nhập 'Benutzer'? Bạn đã bao giờ xem xét sử dụng C# đã bản địa hóa chưa? 'Liste benutzer = (aus a in dc.Benutzer wähle a) .ZuListe();';) –

Trả lời

20

Dưới đây là một biểu thức truy vấn:

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

Hoặc trong ký hiệu dấu chấm:

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

Lưu ý rằng điều này trả về một danh sách của một anonymous type chứ không phải là trường hợp của Benutzer. Cá nhân tôi thích cách tiếp cận này hơn việc tạo ra một danh sách các thể hiện một phần dân cư, vì vậy bất cứ ai xử lý các cá thể một phần cần phải kiểm tra xem chúng có xuất phát từ đâu để tìm ra cái gì thực sự ở đó không.

EDIT: Nếu bạn thực sự muốn xây dựng trường hợp của Benutzer, và LINQ không cho phép bạn làm như vậy trong một truy vấn (Tôi không chắc chắn lý do tại sao), bạn luôn có thể làm:

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(); 

tức là sử dụng loại ẩn danh giống như một DTO. Lưu ý rằng các đối tượng Benutzer trả về sẽ không được liên kết với ngữ cảnh.

+1

Làm thế nào tôi có thể đánh máy nó? – Kovu

+2

Bạn có ý nghĩa gì với "typisite"? –

+1

Tôi muốn loại là Benutzer, không ẩn danh. – Kovu

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

Tôi nghĩ đó là điều bạn muốn nếu bạn muốn tạo cùng một loại danh sách. Nhưng điều đó giả định rằng các thuộc tính bạn đang thiết lập có các bộ định cư công cộng.

+1

Tôi gặp lỗi, rằng tôi không thể sử dụng "Benutzer" trong đó. – Kovu

+1

Bạn cần một dấu phẩy để phân cách các trường, mặc dù tôi nghi ngờ đó là lý do tại sao nó phá vỡ – qui

+1

Tôi vừa thử nó trên máy tính của tôi với một trường hợp sử dụng rất giống và nó hoạt động. Bạn có thể dán lỗi chính xác không? – qui

1

thử:

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

nhưng bây giờ bạn có danh sách các đối tượng ẩn danh không của các đối tượng Lọc.

Các vấn đề liên quan