2013-10-19 19 views
9

Entity FrameworkコードファーストでWCF RESTful Webサービスを開発しています。LINQを使用してselectから列を除外する

多くの列を持つテーブルUsersがあります。

このテーブルの上に
context.Configuration.ProxyCreationEnabled = false; 
var users = from u in context.Users 
      where u.UserId == userId 
      select u; 

は、パスワード欄があり、私はこの列を返したくない:私は、これは、特定のユーザーを得るために行います。

パスワード列をその選択から除外するにはどうすればよいですか?

+1

[LINQ to SQLの複製 - 特定の列を選択し、厳密に型指定されたリストを返す方法](http://stackoverflow.com/questions/1094931/linq-to-sql-how-to-select-specific-columns -and-return-strong-typed-list) –

+1

ところで、IMHOこれは悪いデザインです。エンティティをUI、Webサービスなどに公開することは絶対に避けてください。基本的にPOCOで、公開するフィールドのみのDTO(データ転送オブジェクト)が必要です。 –

答えて

2

はあなたのselect文にしたいん各列を指定します。

var users = from u in context.Users 

     where u.UserId == userId 

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

この構文は私にコンパイル時エラー "'; 'expected"を与えます。匿名型の 'new {u.UserId、u.Whatever、...} '構文を使用することを意味しましたか? – Dai

+2

いいえ、最後にセミコロンを忘れてしまったり、タイプミスをしただけです。もちろん、あなたは "等"と入力しないでください。私の例に示されています。リストされている最後の列の後に、コンマを残して、セミコロンで終了します... select u.UserId、u.AnotherColumn、u.LastColumn; –

+2

あなたが入力した方法はコンパイラによって拒否されます。 [Here](http://stackoverflow.com/a/6772286/75500)は、複数の列を選択する方法です。私はあなたの答えでそれを更新しています。 – Shimmy

6

その悲しいけどNO

あなたが直接、任意の特定の列を除外するためのオプションを持っていません。あなたは、怠惰な列の読み込みを行うことができます。

最も簡単で好きではない方法は、必要な列を含めることです。

2

このような別の方法で、

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

あなたはテーブルごとに複数のLINQのオブジェクトを作成することができます。私はあなたが必要とするフィールドとないフィールドを1つ作成します。しかしCRUD操作はより困難になります。

関連する問題