Cú pháp Linq - Chọn nhiều cột


96

Đây là Cú pháp Linq của tôi mà tôi đang sử dụng cho mô hình thực thể của mình

IQueryable<string> objEmployee = null;

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

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


3
LinqToSql và khung thực thể là khác nhau. Xem stackoverflow.com/questions/8676/...
gideon

Câu trả lời:


189

Như các câu trả lời khác đã chỉ ra, bạn cần sử dụng kiểu ẩn danh.

Về cú pháp, cá nhân tôi thích chuỗi phương thức hơn. 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 khai báo được chuyển đổi thành một chuỗi gọi phương thức tương tự như khi nó được biên dịch.

CẬP NHẬT

Nếu bạn muốn toàn bộ đối tượng, thì bạn chỉ cần bỏ qua lệnh gọi tới Select(), tức là

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

72

Bạn có thể sử dụng các loại ẩn 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 };

bạn có thể gợi ý cách viết đúng biểu thức này không: select new {(DateTime.Now - nợ.ClaimDate), nợ.Amount}; ? Nó ném một lỗi: không hợp lệ vô danh loại thành viên declarator
Dainius Kreivys

1
@DainiusKreivys select new { Diff = (DateTime.Now - debt.ClaimDate), Amount = debt.Amount}. Biểu mẫu được sử dụng trong câu trả lời là cách 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 kiểu ẩn danh. Ví dụ: new {res.EMAIL, res.USER_NAME}là cách 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 được, do đó lỗi trình biên dịch.
Ivan Danilov

5
 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 trình :

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

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

  3. Chọn các trường bắt buộc từ đối tượng nhân viên bằng cách tạo một đối tượng Ẩn danh sử dụng {} mới


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

Làm thế nào để bạn truy cập các cột khác nhau?
ARidder101
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.