Преобразовать NHibernate IList в список на C#

#c# #nhibernate #list #ilist

#c# #nhibernate #Список #ilist

Вопрос:

У меня есть NHibernate IList. Я хочу преобразовать в список. Пожалуйста, помогите мне.

Вот мой код

 IList<Tag> list = Tag.GetAll();
  

Я хочу преобразовать это в list

 public class CategoryTag
{
    public int ID { get; set; }
    public string TagName { get; set; }

    public CategoryTag()
    {

    }

    public List<CategoryTag> GetCategoryTagList()
    {
         IList<Tag> list = Tag.GetAll();

         // How do I return Tag as List?

        return tagList;
    }
}
  

Обновить

Я хочу обновить свой вопрос, поскольку мой вопрос недостаточно хорошо объяснен.

Вот мой код для передачи его в автозаполнение пользовательского интерфейса jQuery:

 [WebMethod]
    public IList<Tag> FetchTagList(string tag)
    {
        var ctag = new List<Tag>(Tag.GetAll())
            .Where(m => m.TagName.ToLower().StartsWith(tag.ToLower()));
        return ctag.ToList();
    }
  

Я получаю следующую ошибку:

Не удается сериализовать систему интерфейса.Коллекции.Общий.IList`1[[Центр вопросов.Домен.Тег, центр вопросов.Домен, версия =1.0.0.0, Культура = нейтральная, PublicKeyToken=null]].

Мне поможет любое решение для передачи моего IList в JSON. Спасибо.

Комментарии:

1. Зачем вам нужен список? Возврат IList на самом деле является предпочтительным подходом, поскольку это не конкретная реализация структуры данных списка

2. Да, но я хочу передать его в JSON с помощью webservice.

3. social.msdn.microsoft.com/forums/en-US/asmxandxml/thread/…

Ответ №1:

Используя LINQ:

 return tagList.ToList();
  

Ответ №2:

Использовать .Метод расширения ToList():

 return list.ToList()
  

Ответ №3:

Вам нужно изменить возвращаемый тип на Tag[] и использовать toArray() вместо ToList(). IIRC, вы не можете сериализовать IList в веб-методе.

Ответ №4:

верните тег.GetAll().ToList() у вас не работает?

Комментарии:

1. Потому что это NHibernate IList. Мне нужно преобразовать его в List.

2. нет. IList это не то, что изобрел nhibernate. Вы имеете в виду, что вам нужно преобразовать Tag список в CategoryTag список, который является вашим DTO.

3. По сути, что я хочу сделать, это передать NHibernate IList<Tag> в JSON с помощью Webservice. Класс CategoryTag — это просто посредник для преобразования IList в List. Если возможно передать IList в JSON с классом тегов, мне бы не понадобился класс CategoryTag.

4. @ Mr. D: Ну, вам придется сопоставить тег с CategoryTag. Вы можете выполнить присваивание слева направо самостоятельно или использовать AutoMapper object-to-object mapper.

Ответ №5:

 var myList = Tag.GetAll()
                 .ConvertAll(tag => new CategoryTag{ Id = tag.Id, XXX = tag.YYY})
                 .ToList();
  

Обновить

Основываясь на вашем комментарии к вашему ответу, я бы вместо этого использовал AutoMapper.

Комментарии:

1. Как я уже сказал, это NHibernate IList. Я получаю эту ошибку с вашим кодом: Ошибка 1 Не удается неявно преобразовать тип ‘System. Коллекции. Generic.List<Центр вопросов. Домен.Тег>’в’систему. Коллекции. Generic.List<Центр вопросов. Веб-сайт. CategoryTag>’ D:MyFilesQuestionCenterQuestionCenter . Веб-сайт Центр вопросов. Веб-сайт CategoryTag.cs 23 21 Центр вопросов. Веб-сайт

2. Я получаю следующую ошибку: не удается сериализовать member QuestionCenter. Домен.Тег.QuestionTags типа System. Коллекции. Общий. IList`1[[Центр вопросов. Домен.QuestionTag, центр вопросов. Домен, версия =1.0.0.0, Культура = нейтральная, PublicKeyToken= null]] потому что это интерфейс.