Linq Sözdizimi - Birden çok sütun seçme


98

Bu, varlık modelim için kullandığım Linq Sözdizimim

IQueryable<string> objEmployee = null;

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

Birden çok sütunu nasıl seçebilirim? Res.ID'yi de seçmek istediğim gibi. Ve bunları nasıl alabilirim? IQueryable çalışmayacak sanırım. Ve buna Linq'den SQL'e denir - değil mi?


3
LinqToSql ve varlık çerçevesi farklıdır. Stackoverflow.com/questions/8676/… sayfasına
gideon

Yanıtlar:


191

Diğer cevapların da belirttiği gibi, isimsiz bir tür kullanmanız gerekir.

Sözdizimi söz konusu olduğunda, şahsen yöntem zincirlemeyi tercih ediyorum. Yöntem zincirleme eşdeğeri şöyle olacaktır: -

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

AFAIK, bildirim temelli LINQ sözdizimi, derlendiğinde buna benzer bir yöntem çağrı zincirine dönüştürülür.

GÜNCELLEME

Tüm nesneyi istiyorsanız, aramayı atlamanız yeterlidir Select(), yani

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

72

Anonim türleri kullanabilirsiniz, örneğin:

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

bu ifadenin nasıl düzgün bir şekilde yazılacağını önerebilir misiniz: yeni {(DateTime.Now - borç.ClaimDate), borç.Amount} seçin; ? Bir hata atıyor: Geçersiz anonim tip üye
bildiricisi

1
@DainiusKreivys select new { Diff = (DateTime.Now - debt.ClaimDate), Amount = debt.Amount}. Yanıtta kullanılan form, ilklendirme ifadesindeki üye adının anonim tipte bir alan adı olarak kullanıldığı bir kısaltmadır. Örneğin new {res.EMAIL, res.USER_NAME}, için bir kısaltmadır new {EMAIL = res.EMAIL, USER_NAME = res.USER_NAME}. Tarihlerde olduğu gibi bir ifade olması durumunda - steno geçerli değildir, dolayısıyla derleyici hatası.
Ivan Danilov

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

VEYA kullanabilirsiniz

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

Açıklama:

  1. Res olarak db'den çalışanı seçin.

  2. Çalışan ayrıntılarını nerede durumuna göre filtreleyin.

  3. Yeni {} kullanarak bir Anonim nesne oluşturarak çalışan nesnesinden gerekli alanları seçin


cevaba açıklama ekleyin.
Sandeep

Farklı sütunlara nasıl erişirsiniz?
ARidder101
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.