Преобразование объекта Entity в IEnumerable

У меня есть база данных SQL, содержащая таблицу Contants, содержащую записи контактов людей. Я передаю объект записи контакта методу ContactsDetailsControl() для отображения сведений о контактах для выбранной записи.

ItemsListBox.ItemsSource хочет список объектов IEnumerable

Какой самый простой способ преобразовать этот объект Entity Object в IEnumberable без необходимости делать что-то вроде приведенного ниже?

ItemsListBox.ItemsSource = новый список().Добавить(контакт);

public ContactsDetailsControl(ProActive.Contact contact)
{
   InitializeComponent();
   List<Contact> l = new List<Contact>();
   l.Add(contact);

   ItemsListBox.ItemsSource = contact[];
}

person user319675    schedule 28.06.2011    source источник


Ответы (4)


Ниже приведен общий способ создания IEnumerable, содержащего один объект.

public ContactsDetailsControl(ProActive.Contact contact)
{
   InitializeComponent();
   ItemsListBox.ItemsSource = MakeMeEnumerable<Contact>(contact);
}

private IEnumerable<T> MakeMeEnumerable<T>(T Entity)
{
    yield return Entity;
}
person Ben Robinson    schedule 28.06.2011
comment
Вам вообще нужен аргумент универсального типа на callsite? - person Isaac Abraham; 01.02.2016

Простой, но некрасивый способ сделать это — использовать Enumerable.Repeat:

ItemsListBox.ItemsSource = Enumerable.Repeat(contact, 1);
person Fernando    schedule 28.06.2011

Вам всегда придется создавать новый список и добавлять в него свой контакт. Отдельный контакт — это не то же самое, что список контактов, и вы не можете (и не должны иметь возможности) выполнять прямое приведение к нему.

Возможно, вы захотите создать еще один класс, наследуемый от List<contact>, который вы можете создать, и он загрузит нужные вам контакты в конструктор.

person Tom Squires    schedule 28.06.2011

Кажется, никто не задается вопросом, почему вы используете ListBox, когда вы сказали, что пытаетесь отобразить информацию для одной записи?

Если вы хотите применить шаблон к элементу, используйте ContentPresenter и задайте свойство ContentTemplate. (Внутренне это то, что делает список, когда он генерирует визуальные элементы для элементов в своем источнике).

person Michael Brown    schedule 28.06.2011