2017-09-11 10 views
0

私はLINQを使用して値を返そうとしていますが、代わりに実際のクエリを返します。私は、ユーザーの実際の電子メールアドレスを取得したいが、代わりに、私は戻って、クエリ文字列を取得していますLINQを使用して単一の値を返すC#

var email = from p in dbContext.People 
      where p.UserId == UserId 
      select new { p.Email }; 
Contact.Email = email.ToString(); 

は、ここに私のコードです。

"SELECT [Extent1].[UserId] AS [UserId], [Extent1].[Email] AS [Email] 
    FROM [dbo].[Person] AS [Extent1] WHERE [Extent1].[UserId] = @p__linq__0" 
+4

select p.Email。新しい{..}は必要ですか? – Fredrik

+0

このコードを 'dbContext.People.FirstOrDefault(p.UserId == UserId);'に短縮することができます。 'dbContext.People'は' IEnumerable'から派生していると仮定します。 –

答えて

2

FirstOrDefaultを使用してください。 は、シーケンスの最初の要素を返します。シーケンスに要素が含まれていない場合は、デフォルト値を返します。:あなただけEmailを返すことにしたい場合は

var email = (from p in dbContext.People 
         where p.UserId == UserId 
         select new { p.Email }).FirstOrDefault(); 

また、あなたは、単にそれを返すことができ、この目的のために匿名型を使用する必要はありません。

var email = (from p in dbContext.People 
        where p.UserId == UserId 
        select p.Email).FirstOrDefault(); 
+3

匿名のタイプではなく**メールのみが必要な場合は、 'select new {p.Email}'を省略することができます。 –

+0

また、FirstOrDefault()がレコードが存在しない場合にnullを返す可能性があることを忘れないでください。特定のユースケースでFirst()を使用するのが最適かどうかを判断する必要があります。レコードが存在しないか、返されたオブジェクトを使用しようとする前にヌルチェックを行います。 –

+0

これは感謝してくれました。 @KyleBurnsはいこのコードが実行される前にヌルチェックをしています。 – Smac

関連する問題