2013-10-19 15 views
9

sto sviluppando un WCF servizio Web RESTful con il codice Entity Framework First.escludere una colonna da un SELECT che utilizza LINQ

Ho una tabella Users con un sacco di colonne. Lo faccio per ottenere un utente specifico:

context.Configuration.ProxyCreationEnabled = false; 
var users = from u in context.Users 
      where u.UserId == userId 
      select u; 

Su questo tavolo, c'è una colonna password e non voglio tornare questa colonna.

Come posso escludere colonna della password da quella di selezione?

+1

possibile duplicato di [LINQ to SQL: come selezionare colonne specifiche e restituire l'elenco fortemente digitato] (http://stackoverflow.com/questions/1094931/linq-to-sql-how-to-select-specific-columns -and-return-fortemente-typed-list) –

+1

A proposito, questo è un cattivo design. Non si dovrebbe mai esposto le vostre entità per l'interfaccia utente, Web Service, ecc Si dovrebbe avere un DTO (Data Transfer Object) che sostanzialmente è un POCO con i soli campi che si desidera esporre. –

risposta

2

specificare ogni colonna che si vuole nella vostra dichiarazione prescelta:

var users = from u in context.Users 

     where u.UserId == userId 

     select u.UserId, u.Watever, etc... ; 
+1

Questa sintassi mi dà un errore in fase di compilazione "'; 'previsto". Intendevi usare la sintassi 'new {u.UserId, u.Whatever, ...}' per i tipi anonimi? – Dai

+2

No, hai semplicemente dimenticato il punto e virgola alla fine o hai fatto un refuso. Ovviamente non si digita "ecc." mostrato nel mio esempio. dopo l'ultima colonna elencato, tralasciare la virgola e terminare con una virgola ... selezionare u.UserId, u.AnotherColumn, u.LastColumn; –

+2

Il modo in cui l'hai digitato viene rifiutato dal compilatore. [Qui] (http://stackoverflow.com/a/6772286/75500) spiega come selezionare più colonne. Lo sto aggiornando nella tua risposta. – Shimmy

6

La sua triste da dire, ma NO

Non è possibilità di escludere direttamente una colonna particolare. Puoi andare con il caricamento pigro delle colonne.

Il metodo più semplice e non simpatia sarebbe quella di includere le colonne che si desidera.

2

un altro modo come questo,

var users = from u in context.Users 
       where u.UserId == userId 
       select new 
       { 
        col1 = u.UserId, 
        col2 = u.Watever 
       }.ToList(); 
0

È possibile creare più di un oggetto LINQ per ogni tabella. Ne creerei uno con il campo di cui hai bisogno e uno senza. Tuttavia rende le operazioni CRUD più difficili.

Problemi correlati