Выбор детской проекции от родителя - PullRequest
2 голосов
/ 15 февраля 2010

Вот три класса в моем домене:

public class Quote : IEntity, IAggregateRoot {
    public int QuoteId { get; set; }
    public IEnumerable<Price> Prices { get; set; }
}

public class Price : IEntity {
    public int PriceId { get; set; }
    public Carrier Carrier { get; set; }
    public decimal? Price { get; set; }
    public Quote Quote { get; set; }
}

public class Carrier : IEntity, IAggregateRoot {
    public int CarrierId { get; set; }
    public string Name { get; set; }
}

Я хочу иметь возможность выбрать прогноз на основе цен в предложении. Тип возвращаемого значения должен быть IEnumerable <[анонимный объект]>. Я должен начать запрос с цитаты, потому что это объект корневого домена. Вот что у меня так далеко:

session.Linq<Quote>()
    .Expand("Prices")
    .Where(q => q.QuoteId == 1)
    .Select(q => {
        //this is where I don't know what to do.
        //Maybe somthing like this:
        return q.Prices.Select(p => {
            new { CustomerName = p.Customer.Name, Price = p.Price }
        });
    });

Отображения будут:

  • Quote.Prices> HasMany (один ко многим)
  • Price.Quote> Ссылки (многие-к-одному)
  • Price.Carrier> Рекомендации (один к одному)

1 Ответ

2 голосов
/ 16 февраля 2010

Я нашел свой ответ. Я полностью забыл о выражении SelectMany Linq. Вот мое решение.

session.Linq<Quote>()
    .Where(q => q.QuoteId == 1)
    .SelectMany(q => q.Prices, (q, p) => new { CustomerName = p.Customer.Name });
...