#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]] потому что это интерфейс.