"Тип выражения 'NhDistinctExpression' не поддерживается этим SelectClauseVisitor." - с синтаксисом запроса

Учитывая следующее выражение, как мне получить отдельный список мест, не получая этого неприятного "Тип выражения" NhDistinctExpression "не поддерживается этим SelectClauseVisitor". ошибка?

    public Dictionary<int, string> GetScheduledVenuesFuture()
    {
        var venues = from v in _sp.CurrentSessionOn(DatabaseName.MyDB).Query<Venue>()
                     join s in _sp.CurrentSessionOn(DatabaseName.MyDB).Query<ScheduledClass>()
                             on v.VenueId equals s.Venue.VenueId
                     where s.CourseDate >= _cac.Now
                             && s.Closed == false
                             && s.Canceled == false

                     select new
                     {
                         v.VenueId,
                         v.Name
                     };

        return venues.ToDictionary(v => v.VenueId, v => v.Name);
    }

Я пытался установить

        return venues.ToDictionary(v => v.VenueId, v => v.Name);

в отличие от этого:

        return venues.Distinct().ToDictionary(v => v.VenueId, v => v.Name);

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

1 ответ

Решение

Я решил решить эту проблему другим способом:

    public class ScheduledVenueDTO
    {
        public int VenueId { get; set; }
        public string Name { get; set; }
    }

    public Dictionary<int, string> GetScheduledVenuesFuture()
    {
        var venues = from v in _sp.CurrentSessionOn(DatabaseName.SMS).Query<Venue>()
                     join s in _sp.CurrentSessionOn(DatabaseName.SMS).Query<ScheduledClass>()
                             on v.VenueId equals s.Venue.VenueId
                     where s.CourseDate >= _cac.Now
                             && s.Closed == false
                             && s.Canceled == false
                     select new
                     {
                         v.VenueId,
                         v.Name
                     };

        var svd = venues
            .GroupBy(v => new { v.VenueId, v.Name})
            .Select(v => new ScheduledVenueDTO() {
                VenueId = v.Key.VenueId,
                Name = v.Key.Name
            });

        return svd.ToDictionary(v => v.VenueId, v => v.Name);
    }

Я просто создал новое DTO и с помощью groupBy ввел это DTO только в разные места.

Другие вопросы по тегам