LINQ to NHibernate этим исключением сообщения: `get_Item (Int32)` - PullRequest
0 голосов
/ 13 марта 2012

У меня есть сущность Person.У человека есть агрегация по многим записям.

public class Person()
{
    virtual public IList<Record> Records {get; set;}
}

и

public class Record()
{
    virtual public int Number {get; set;}
}

У меня есть запрос linq от NHibernate.

var q = SessionInstance.Query<Person>()
        .Where(x => x.Records.Any() && x.Records[0].Number>= 5);
q.ToList<Person>()

Это ошибка времени выполнения поисключение этого сообщения: Domain.Entities.Record get_Item(Int32)

Почему?

Ответы [ 2 ]

0 голосов
/ 14 марта 2012

Ваше сообщение об исключении неполное, но я считаю, что проблема только в том, что поддержка метода индексатора коллекции (get_Item()) не реализована.

Я написал очень похожую часть для IDictionary<,>, ознакомьтесь DictionaryGenerator.cs

Вы можете открыть для этого Jira , просто внедрить и зарегистрировать свой генератор, или, что еще лучше, открыть проблему, раскрутить репозиторий, внедрите эту функцию и отправьте запрос на извлечение.

0 голосов
/ 13 марта 2012

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

измените это значение на

var q = SessionInstance.Query<Person>().Where(x => x.Records.Any() && x.Records.FirstOrDefault().Number>= 5);
q.ToList<Person>()

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

ОБНОВЛЕНО

Это будет работать, но, пожалуйста, убедитесь, что логика верна.

var q = SessionInstance.Query<Person>().Where(x => x.Records.Any(r => r.Number >= 5));
...