Linq Syntax - Memilih beberapa kolom

97

Ini adalah Sintaks Linq saya yang saya gunakan untuk model entitas saya

IQueryable<string> objEmployee = null;

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

Bagaimana cara memilih beberapa kolom? Seperti saya ingin memilih res.ID juga. Dan bagaimana saya bisa menerima itu? IQueryable tidak akan berhasil, saya pikir. Dan ini disebut Linq ke SQL - bukan?

Riz
sumber
3
LinqToSql dan kerangka entitas berbeda. Lihat stackoverflow.com/questions/8676/…
gideon

Jawaban:

191

Seperti yang ditunjukkan oleh jawaban lain, Anda perlu menggunakan tipe anonim.

Sejauh menyangkut sintaks, saya pribadi jauh lebih menyukai perangkaian metode. Metode yang setara dengan rangkaian adalah: -

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

AFAIK, sintaks LINQ deklaratif diubah menjadi rantai panggilan metode yang mirip dengan ini ketika dikompilasi.

MEMPERBARUI

Jika Anda menginginkan keseluruhan objek, maka Anda hanya perlu menghilangkan panggilan ke Select(), yaitu

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

Anda dapat menggunakan tipe anonim misalnya:

  var empData = from res in _db.EMPLOYEEs
                where res.EMAIL == givenInfo || res.USER_NAME == givenInfo
                select new { res.EMAIL, res.USER_NAME };
Ivan Danilov
sumber
dapatkah Anda menyarankan cara menulis ekspresi ini dengan benar: pilih baru {(DateTime.Now - debt.ClaimDate), debt.Amount}; ? Ini melempar kesalahan:
Deklarator
1
@DainiusKreivys select new { Diff = (DateTime.Now - debt.ClaimDate), Amount = debt.Amount}. Formulir yang digunakan dalam jawaban adalah singkatan, di mana nama anggota dalam ekspresi inisialisasi digunakan sebagai nama bidang berjenis anonim. Misalnya new {res.EMAIL, res.USER_NAME}adalah singkatan dari new {EMAIL = res.EMAIL, USER_NAME = res.USER_NAME}. Jika ada ekspresi, seperti dalam kasus Anda dengan tanggal - singkatan tidak berlaku, maka kesalahan kompiler.
Ivan Danilov
5
 var employee =  (from res in _db.EMPLOYEEs
 where (res.EMAIL == givenInfo || res.USER_NAME == givenInfo)
 select new {res.EMAIL, res.USERNAME} );

ATAU Anda bisa menggunakan

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

Penjelasan:

  1. Pilih karyawan dari db sebagai res.

  2. Saring detail karyawan sesuai kondisi di mana.

  3. Pilih bidang wajib dari objek karyawan dengan membuat objek Anonim menggunakan baru {}

Bimzee
sumber
tambahkan penjelasan dalam jawaban.
Sandeep
Bagaimana Anda mengakses kolom yang berbeda?
ARidder101