2011-09-26 27 views
6

Mã LINQ trả về loại ẩn danh làm cách nào tôi có thể trả về loại "Khách hàng" mạnh mẽ? Tôi đang trả về một loại ẩn danh vì tôi chỉ muốn chọn một số trường nhất định từ thực thể.EF4 làm cách nào để chuyển đổi loại ẩn danh thành loại mạnh trong LINQ

var customer = from c in _entities.Customers 
          join con 
          in _entities.Contracts on c.CustomerID equals con.customerID 
          where con.contractNo == number 
          select new 
          { 
           Surname = c.Surname, 
           Forename= c.Forename, 
           Address = c.Address, 
           Suburb = c.Suburb, 
           State = c.State, 
           Postcode = c.PostCode, 
           PhoneNo = c.PhoneNo 
         }; 

Cảm ơn

+1

bạn thực sự nên cố gắng chấp nhận một số câu trả lời của bạn, hoặc những người wil Tôi không muốn giúp bạn trong tương lai. – eandersson

+0

@Fuji cảm ơn thông tin. –

Trả lời

6

Hoặc làm

var customer = from c in _entities.Customers 
         join con 
         in _entities.Contracts on c.CustomerID equals con.customerID 
         where con.contractNo == number 
         select c; 

để chọn các trường hợp khách hàng với nguyên trạng hoặc

Customer customer = (from c in _entities.Customers 
         join con 
         in _entities.Contracts on c.CustomerID equals con.customerID 
         where con.contractNo == number 
         select new Customer{ 
          Surname = c.Surname, 
          Forename= c.Forename, 
          Address = c.Address, 
          Suburb = c.Suburb, 
          State = c.State, 
          Postcode = c.PostCode, 
          PhoneNo = c.PhoneNo 
         }).FirstOrDefault(); 

để tạo ra các trường hợp mới của khách hàng chỉ với các thuộc tính bạn quan tâm đến việc điền. (Với điều kiện lớp khách hàng có một constructor parameterless)

+0

Tôi đã sử dụng truy vấn LINQ thứ hai nhưng làm cách nào để truyền khách hàng var cho Khách hàng? Tôi chỉ muốn trả lại một hàng. –

+0

@marks sử dụng '.SingleOrDefault()' hoặc '.FirstOrDefault()' theo yêu cầu. –

+0

Tôi gặp lỗi về "Chọn" Khách hàng mới. "Không thể chuyển đổi hoàn toàn loại system.linq. Tôi có thể chuyển đổi một cách rõ ràng (bạn đang thiếu một diễn viên) Khi tôi tạo một Khách hàng mới, tôi có cần một dàn diễn viên không? –

2

Dường như bạn đang tìm kiếm cho tất cả các khách hàng có bất cứ hợp đồng với một contractNo phù hợp number - không sử dụng một tham gia, thay vì sử dụng tài sản EF navigation:

var customers = _entities.Customers 
         .Where(c => c.Contracts.Any(x => x.contractNo == number)); 

Nếu có chỉ là một đơn (hoặc có thể không có) của các khách hàng sử dụng SingleOrDefault() chỉ lấy một đơn Customer thực thể:

Customer customer = _entities.Customers 
          .Where(c => c.Contracts.Any(x => x.contractNo == number)) 
          .SingleOrDefault(); 
+0

Tôi sẽ xem xét điều tra thuộc tính điều hướng EF. Làm cách nào để truyền khách hàng var cho Khách hàng? –

+1

@ user730381: this ** is ** a Customer - trong ví dụ thứ hai, bạn có thể sử dụng 'var customer = ...' và 'Customer customer = ...' thay thế cho nhau – BrokenGlass

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