2011-07-21 29 views
71

Ésta es mi LINQ sintaxis que estoy usando para mi modelo de entidadLINQ Sintaxis - Selección de varias columnas

IQueryable<string> objEmployee = null; 

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

¿Cómo puedo seleccionar varias columnas? Como también quiero seleccionar res.ID. ¿Y cómo puedo recibirlos? IQueryable no funcionará, creo. Y esto se llama Linq a SQL, ¿verdad?

+3

LinqToSql y marco de la entidad son diferentes. Consulte http://stackoverflow.com/questions/8676/entity-framework-vs-linq-to-sql – gideon

Respuesta

138

Como las otras respuestas han indicado, es necesario utilizar un tipo anónimo.

En lo que se refiere a la sintaxis, yo personalmente prefiero el encadenamiento de métodos. El método de encadenamiento equivalente sería: -

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

AFAIK, la sintaxis LINQ declarativo se convierte en una cadena llamada de método similar a este cuando se compila.

ACTUALIZACIÓN

Si desea todo el objeto, a continuación, sólo hay que omitir la llamada a Select(), es decir

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

Puede utilizar los tipos anónimos por ejemplo:

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

¿Puede sugerirnos cómo escribir correctamente esta expresión ?: seleccione nuevo {(DateTime.Now - debt.ClaimDate), deuda. Cantidad}; ? Se lanza un error: declarante de miembro de tipo anónimo no válido –

+1

@DainiusKreivys 'select new {Diff = (DateTime.Now - debt.ClaimDate), Amount = debt.Amount}'. El formulario utilizado en la respuesta es una abreviatura, donde el nombre del miembro en la expresión de inicialización se usa como un nombre de campo de tipo anónimo. P.ej. 'new {res.EMAIL, res.USER_NAME}' es una abreviatura de 'nuevo {EMAIL = res.EMAIL, USER_NAME = res.USER_NAME}'. En caso de que exista una expresión, como en su caso con las fechas, la taquigrafía no es aplicable, por lo tanto, el error del compilador. –

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

o puede utilizar

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

Explicación:

  1. Seleccionar empleado de la base de datos como res.

  2. Filtre los detalles del empleado según la condición donde.

  3. campos requeridos Seleccione el objeto de los empleados mediante la creación de un objeto anónimo utilizando las nuevas {}

+0

Agregue una explicación a su código. – Sandeep

+0

agregar explicación en respuesta. – Sandeep