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?


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

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 };

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 {}


tambahkan penjelasan dalam jawaban.
Sandeep

Bagaimana Anda mengakses kolom yang berbeda?
ARidder101
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.