0

私はメンタルブロックを抱えているか、それほど単純ではありません。

私は2つのクラスを持っています。

public class House
{
    public string Id { get; set; }
    public string City { get; set; }
    public string HouseNumber { get; set; }
}

public class Person
{
    public string Id { get; set; }
    public string HouseId { get; set; }
    public string Name { get; set; }
}

ここで、フラット化されたモデル ({City, HouseNumber, PersonName}) で、特定の都市に住むすべての人々のリストが必要です。

それをマッピングする方法がわかりません.PersonクラスにCityがあれば簡単ですが、そうではなく、意味がありません。

ヘルプ ?

編集:

実際にメモリ内リストで機能するこのインデックスを思いつきましたが、Ravenは何も返しません:(

 public class PeopleLocations : AbstractMultiMapIndexCreationTask<PeopleLocations.EntryLocation>
    {
        public class PeopleLocation
        {
            public string PersonId { get; set; }
            public string HouseId { get; set; }
            public string City { get; set; }
        }


        public PeopleLocations()
        {
            this.AddMap<House>(venues => venues.Select(x => new
            {
                x.City,
                HouseId = x.Id,
                PersonId = (string)null
            }));

            this.AddMap<Person>(people => people.Select(x => new
            {
                City = (string)null,
                HouseId = x.HouseId,
                PersonId = x.Id
            }));

            this.Reduce = results => results.GroupBy(x => x.HouseId)
                .Select(x => new
                {
                    HouseId = x.Key,
                    People = x.Select(e => e.PersonId),
                    City = x.FirstOrDefault(y => y.City != null).City,
                })
            .SelectMany(x =>
                x.People.Select(person => new PeopleLocation
                {
                    PersonId = person,
                    HouseId = x.HouseId,
                    City = x.City,
                })
            )
            .Select(x => new { PersonId = x.PersonId, x.City, x.HouseId });
        }
    }
4

1 に答える 1

1

これはMultiMap インデックスを使用して行うことができますが、RavenDB 2.0 には関連ドキュメントのインデックス作成と呼ばれる優れた新機能があり、はるかに簡単です。

Map = people => from person in people
                let house = LoadDocument<House>(person.HouseId)
                select new
                {
                    house.City,
                    house.HouseNumber,
                    PersonName = person.Name,
                }
于 2013-01-11T00:16:46.593 に答える