わかりました、私はこれらのPOCOを持っています
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Manufacturer { get; set; }
}
public class Offer
{
public int Id { get; set; }
public User Seller { get; set; }
public Product Product { get; set; }
public decimal Price { get; set; }
}
Productから派生したクラスがたくさんありますが、クラスOfferの製品プロパティはそれらのいずれかになります。
各商品の最低価格のオファーを返す静的インデックスを定義し、商品タイプでフィルタリングしたいと思います。
ここまで来ました。
Map = offers => offers.Select(x => new Offer { Product = x.Product, Price = x.Price });
Reduce = results => from r in results
group r by r.Product into g
select new Offer { Product = g.Key , Price = g.Min(x => x.Price) };
これは機能し、最低価格を提供しますが、MapはProduct.Idのみを使用する必要があり、全体ではないと思います(方法がわかりません)。
そして、私がインデックスを照会するとき:
Session.Query<Offer>("BestOffersIndex").Where(offer => offer.Product is DerivedProduct)
Where条件を無視するだけです。
私がこれを行う場合:
Map = offers => offers.Select(x => new OfferIndexResult { ProductType = MetadataFor(x.Product)["Raven-Entity-Name"].ToString(), ProductId = x.Product.Id, Price = x.Price });
Reduce = results => from r in results
group r by r.ProductId into g
select new OfferIndexResult { ProductType = g.FirstOrDefault().ProductType, ProductId = g.Key, Price = g.Min(x => x.Price) };
TransformResults = (database, offers) => from offer in offers
let product = database.Load<Product>(offer.ProductId.ToString())
select new Offer { Product = product, Price = offer.Price };
ライブプロジェクションに読み込まれた製品がnullであり、フィルタリングの目的でProductTypeを使用する方法がわかりません。
どんな助けでも大歓迎です。