2013-12-16 4 views
2

Я делаю веб-приложение asp.net mvc4. Я написал функцию контактной формы в своем контроллере, которая отправляет отзывы от пользователей. Я использую класс System.Net.Mail.ASP.NET MVC4 Получить электронное письмо зарегистрированного пользователя

Я использую Simplemembership, и я расширил UserProfile со строкой свойства электронной почты.

Как зарегистрироваться вошедший пользователь? Я хочу включить его в сообщение, поэтому я могу ответить.

Я пытался использовать:

var em = from m in db.UserProfiles.Where(a => a.UserName.Contains(User.Identity.Name)) select m.Email; 
string email = em.ToString(); 

но в посланной почте у меня есть:

SELECT 
[Extent1].[Email] AS [Email] 
FROM [dbo].[UserProfile] AS [Extent1] 
WHERE [Extent1].[UserName] LIKE @p__linq__0 ESCAPE N'~' 

ответ

0

Чтобы получить одну запись из базы данных, необходимо выбрать первую строку, возвращенную с First() Метод:

string email = db.UserProfiles 
      .Where(a => a.UserName.Contains(User.Identity.Name)) 
      .First().Email; 

Надеюсь, это поможет!

+0

В m.Email Я получил сообщение об ошибке: Невозможно неявно преобразовать тип 'string' в 'bool'. Мне что-то не хватает? – user2962215

+0

ОК, я просто меняю строку email = em.ToString(); для строки email = em.First(); и это работает. Большое спасибо! :) – user2962215

0

У вас уже есть правильный ответ, поэтому я просто бросаю его сюда для будущих поисковиков, чтобы увидеть более короткий синтаксис.

string email = db.UserProfiles 
      .FirstOrDefault(a => a.UserName.Contains(User.Identity.Name)).Email; 

Однако в вашем случае, я бы обеспокоен User1 приема сообщений электронной почты, предназначенных для User11. Чтобы этого не было, вам нужно быть более конкретным в вашем запросе

string email = db.UserProfiles 
      .FirstOrDefault(a => a.UserName == User.Identity.Name).Email; 
Смежные вопросы