2013-03-08 2 views
0

это мой класс сообщений:не реализует IEnumerable

public class SMessage 
{ 

    public int AccountId { get; set; } 

    public int MessageId { get; set; } 

    public string str{ get; set; } 
    public string Subject { get; set; } 
    public int sendByAccountId { get; set; } 
    [ForeignKey("sendByAccountId")] 
    public virtual AccountModels account { get; set; } 

} 

это мой DTO класс:

public class MessageInformation 
{ 
    public string Subject { get; set; } 
    public string str { get; set; }  
} 

и это мой метод в хранилище:

public List<MessageInformation> GetAllMessagesForUser(int accountId) 
{ 
    MessageInformation messages 
    using (SishanContext Context = new SishanContext()) 
    { 
     messages = (from m in Context.SMessages.ToList() 
        where m.AccountId == accountId 
        select new MessageInformation 
        { 
         m.Subject, 
         m.str 
        }).ToList(); 
    } 
    return messages; 
} 

но , У меня есть ошибка:

Cannot initialize type 'sishan.Models.MessageInformation' with a collection initializer because it does not implement 'System.Collections.IEnumerable'
+0

Почему вы называете .ToList дважды ? Возможно, вы захотите профилировать свой запрос, чтобы увидеть, что фильтр применяется на клиенте, а не в базе данных (предложение Where не передается в базу данных). –

ответ

2

Вы должны назвать свойства в инициализаторе, как это:

... 
select new MessageInformation { 
    Subject = m.Subject, 
    str = m.str 
} 

В качестве альтернативы, вы можете предоставить конструктор с двумя аргументами, и называют его:

public class MessageInformation { 
    public string Subject { get; set; } 
    public string str { get; set; } 
    public MessageInformation(string subj, string str) { 
     Subject = subj; 
     this.str = str; 
    } 
} 
... 
select new MessageInformation(m.Subject, m.str) 
+0

Похоже, у него также отсутствует скобка для конструктора; Я не думаю, что их можно опустить. – Servy

+0

@Servy Я уверен, что вы можете опустить их ([link] (http://ideone.com/jO6LWe)). На самом деле, ReSharper регулярно меня заводит, чтобы включить пустые круглые скобки перед вставными скобками. – dasblinkenlight

+1

Хотя я больше не использую ReSharper, прошлое использование заставило меня все еще навязчиво удалить лишние пустые скобки ... –

Смежные вопросы