"Тип выражения '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 только в разные места.