2011-07-21 36 views
71

này được LINQ Cú pháp của tôi mà tôi đang sử dụng để mô hình thực thể của tôiLINQ Cú pháp - Lựa chọn nhiều cột

IQueryable<string> objEmployee = null; 

objEmployee = from res in _db.EMPLOYEEs 
       where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo) 
       select res.EMAIL; 

Làm thế nào tôi có thể chọn nhiều cột? Giống như tôi muốn chọn res.ID. Và làm thế nào tôi có thể nhận được chúng? IQueryable sẽ không hoạt động. Và điều này được gọi là LINQ to SQL - phải không?

+3

LinqToSql và khuôn khổ thực thể khác nhau. Xem http://stackoverflow.com/questions/8676/entity-framework-vs-linq-to-sql – gideon

Trả lời

138

Như câu trả lời khác đã chỉ ra, bạn cần phải sử dụng một loại vô danh.

Theo như cú pháp có liên quan, cá nhân tôi thích phương pháp chuỗi. Phương thức chuỗi tương đương sẽ là: -

var employee = _db.EMPLOYEEs 
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo) 
    .Select(x => new { x.EMAIL, x.ID }); 

AFAIK, cú pháp LINQ được khai báo được chuyển đổi thành chuỗi cuộc gọi phương thức tương tự như khi được biên dịch.

CẬP NHẬT

Nếu bạn muốn toàn bộ đối tượng, sau đó bạn chỉ cần bỏ qua các cuộc gọi đến Select(), tức là

var employee = _db.EMPLOYEEs 
    .Where(x => x.EMAIL == givenInfo || x.USER_NAME == givenInfo); 
63

Bạn có thể sử dụng các loại vô danh ví dụ:

var empData = from res in _db.EMPLOYEEs 
       where res.EMAIL == givenInfo || res.USER_NAME == givenInfo 
       select new { res.EMAIL, res.USER_NAME }; 
+0

bạn có thể đề xuất cách viết đúng biểu thức này: chọn new {(DateTime.Now - debt.ClaimDate), nợ. Số tiền}; ? Nó ném một lỗi: Người khai báo thành viên kiểu vô danh không hợp lệ –

+1

@DainiusKreivys 'chọn new {Diff = (DateTime.Now - debt.ClaimDate), Amount = debt.Amount}'. Biểu mẫu được sử dụng trong câu trả lời là viết tắt, trong đó tên thành viên trong biểu thức khởi tạo được sử dụng làm tên trường của loại ẩn danh. Ví dụ. 'new {res.EMAIL, res.USER_NAME}' là viết tắt của 'new {EMAIL = res.EMAIL, USER_NAME = res.USER_NAME}'. Trong trường hợp có một biểu thức, như trong trường hợp của bạn với ngày - viết tắt không áp dụng, do đó lỗi trình biên dịch. –

3
var employee = (from res in _db.EMPLOYEEs 
where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo) 
select new {res.EMAIL, res.USERNAME}); 

HOẶC bạn có thể sử dụng

var employee = (from res in _db.EMPLOYEEs 
where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo) 
select new {email=res.EMAIL, username=res.USERNAME}); 

Giải thích:

  1. Chọn nhân viên từ db là res.

  2. Lọc chi tiết nhân viên theo điều kiện nơi.

  3. lĩnh vực Chọn yêu cầu từ các đối tượng người lao động bằng cách tạo ra một đối tượng Anonymous sử dụng mới {}

+0

Thêm lời giải thích cho mã của bạn. – Sandeep

+0

thêm giải thích trong câu trả lời. – Sandeep

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