2011-07-21 15 views
71

To jest mój Linq składni, które używam do mojego podmiot modeluLINQ Składnia - Wybór wielu kolumn

IQueryable<string> objEmployee = null; 

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

jaki sposób można wybrać wiele kolumn? Tak jak chcę wybrać również res.ID. I jak mogę je otrzymać? IQueryable nie zadziała, jak sądzę. A to się nazywa Linq do SQL - prawda?

+3

LinqToSql i Entity Framework są różne. Zobacz http://stackoverflow.com/questions/8676/entity-framework-vs-linq-to-sql – gideon

Odpowiedz

138

Jak wykazały inne odpowiedzi, trzeba użyć typ anonimowy.

Jeśli chodzi o składnię, osobiście zdecydowanie preferuję metodę łańcuchową. Równoważnik sposób Łańcuch może być: -

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

AFAIK The deklaratywne składni LINQ przekształca się w sieci połączenia Metoda podobny do tego, gdy są zbierane.

UPDATE

Jeśli chcesz cały obiekt, a następnie po prostu trzeba pominąć wezwanie do Select(), tj

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

Można używać typów anonimowych np

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

czy możesz zaproponować, jak poprawnie napisać to wyrażenie: wybierz nowy {(DateTime.Now - debt.ClaimDate), dług. Ilość}; ? Zgłasza błąd: Nieprawidłowy anonimowy deklarator typu typu –

+1

@DainiusKreivys 'wybierz nowy {Diff = (DateTime.Now - debt.ClaimDate), Kwota = dług.Na}}. Formularz używany w odpowiedzi to skrót, w którym nazwa członka w wyrażeniu inicjującym jest używana jako nazwa pola typu anonimowego. Na przykład. 'new {res.EMAIL, res.USER_NAME}' jest skrótem dla 'new {EMAIL = res.EMAIL, USER_NAME = res.USER_NAME}'. W przypadku wyrażeń, jak w twoim przypadku z datami - skrót nie ma zastosowania, stąd błąd kompilatora. –

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

lub można użyć

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

. Objaśnienie:

  1. Wybierz pracownika z bazy danych jako res.

  2. Przefiltruj dane pracownicze zgodnie z warunkiem.

  3. Zaznacz pola wymagane od pracownika obiektu przez utworzenie obiektu Anonymous stosując nowy {}

+0

Dodaj objaśnienie kodu. – Sandeep

+0

dodaj wyjaśnienie w odpowiedzi. – Sandeep