鉴于以下表达方式,我如何获得一个明确的场地列表,而不会让那些令人讨厌的场景类型" 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);
但是会引发错误。我还尝试在parens中包含整个查询语法语句,并在其末尾添加.Distinct(),但这也导致了同样的错误。
答案 0 :(得分:0)
我用另一种方式解决了这个问题:
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。