Я новичок в Рейвен, поэтому я даже не уверен, правильно ли я здесь подхожу. Мне нужно создать список элементов, свойства которых извлекаются из отдельных документов ... по сути, JOIN.
Скажите, у меня есть следующие объекты:
public class Merchant
{
public string Id {get;set;}
public string MerchantName {get;set;}
}
public class Location
{
public string Id {get;set;}
public string MerchantId {get;set;}
public string City {get;set;}
}
public class Item
{
public string Id {get;set;}
public string MerchantId {get;set;}
public string ItemName {get;set;}
}
И мне нужно преобразовать MapReduce (я думаю) в список MerchantItem
public class MerchantItem
{
public string ItemId {get;set;}
public string MerchantId {get;set;{
public string LocationId {get;set;}
public string ItemName {get;set;}
public string City {get;set;}
public string MerchantName {get;set;}
}
Вот моя (нерабочая) мультикарта уменьшения:
AddMap<Merchant>(merchants => from m in merchants
select new
{
ItemId = (string)null,
MerchantId = m.Id,
LocationId = (string)null,
ItemName = (string)null,
City = (string)null,
MerchantName = m.Name
});
AddMap<Location>(locations => from l in locations
select new
{
ItemId = (string)null,
MerchantId = l.MerchantId,
LocationId = l.Id,
ItemName = (string)null,
City = l.City,
MerchantName = (string)null
});
AddMap<Item>(items=> from i in items
select new
{
ItemId = i.Id,
MerchantId = i.MerchantId,
LocationId = (string)null,
ItemName = i.ItemName,
City = (string)null,
MerchantName = (string)null
});
Reduce = results => from r in results
group result by r.LocationId
into g
select new
{
ItemId = g.Select(x => x.ItemId),
MerchantId = g.Select(x => x.MerchantId),
LocationId = g.Key,
ItemName = g.Select(x => x.ItemName ).Where(x => x != null).FirstOrDefault(),
City = g.Select(x => x.City ).Where(x => x != null).FirstOrDefault(),
MerchantName = g.Select(x => x.MerchantName ).Where(x => x != null).FirstOrDefault()
});
Идея в том, что мне нужен MerchantItem для каждого предмета и местоположения в базе данных. В SQL мы просто говорим о паре объединений, но я совершенно туп на том, как это сделать в Raven.