Я хочу создать базовый вложенный индекс, который содержит только идентификатор содержащего документ и вложенные данные. Следуя документации ravenDb, я сделал это следующим образом:
public class LeaguesIndex : AbstractIndexCreationTask<CommunityDocument>
{
public class Result
{
public string CommunityId { get; set; }
public Domain.TeamLeague League { get; set; }
}
public LeaguesIndex()
{
Map = communities => from community in communities
from league in community.TeamLeagues
select new
{
CommunityId = community.Id.Replace("CommunityDocuments/", string.Empty),
League = league
};
}
}
И запросить его:
var leagues = session
.Query<LeaguesIndex.Result, LeaguesIndex>()
.Where(x => x.CommunityId == input.Id)
.OfType<CommunityDocument>()
.ToList();
Это дало результат, за исключением того, что результат содержал весь CommunityDocument. Как я могу сделать это так, чтобы я просто получил класс LeaguesIndex.Result? (Я пытался удалить строку «OfType», но она мне не понравилась.)
edit - это работает:
public class LeaguesIndex : AbstractIndexCreationTask<CommunityDocument, LeaguesIndex.Result>
{
public class Result
{
public string CommunityId { get; set; }
public Domain.League League { get; set; }
}
public LeaguesIndex()
{
Map = communities => from community in communities
from league in community.TeamLeagues
select new
{
CommunityId = community.Id.Replace("CommunityDocuments/", string.Empty),
League = league
};
StoreAllFields(FieldStorage.Yes);
}
}
запрос:
var lastLeague = session
.Query<LeaguesIndex.Result, LeaguesIndex>()
.Where(x => x.CommunityId == input.Id)
.AsProjection<LeaguesIndex.Result>()
.LastOrDefault();