[OK]モデルでLINQ:LIST <>に複数のナビゲーションを設定する
、リード、他の特性の中で、我々はこれらの持っている:
public class Lead
{
....
public int LeadID {get; set; }
public virtual ICollection<QuoteRevision> QuoteRevisions { get; set; }
....
}
そしてQuoteRevisionを...
public class QuoteRevision
{
....
[ForeignKey(nameof(LeadID))]
public virtual Lead Lead { get; set; }
public virtual ICollection<QuoteRevisionProduct> QuoteRevisionProduct{ get; set; }
....
}
そしてQuoteRevisionProductのモデル:
public class QuoteRevisionProduct
{
....
[ForeignKey(nameof(QuoteRevisionID))]
public virtual QuoteRevision QuoteRevision { get; set; }
[ForeignKey("ProductID")]
public virtual Product Product { get; set; }
....
}
そして最後に...
public class Product
{
....
public string Code { get; set; }
....
}
これらは、複数のプロパティを持つQuoteSearchItemというオブジェクトを作成するためにクエリを行う必要があるモデルです。ここではそれらの2の:
public class QuoteSearchItem
{
....
public LeadID {get; set; }
public List<string> Codes { get; set; }
....
}
私がリード内のすべての行のこののIQueryableを始めている:
leads = IQueryable<Lead>
そして、このやって:私はどのようにわからない
var results = from l in leads
from qr in l.QuoteRevisions
from rp in qr.RevisionProducts
select new QuoteSearchItem
{
....
LeadID = l.LeadID,
AdditionalProducts = ???
....
};
をそのコードのリストを取得します。私はこれを行うことができます。
Code = rp.Product.Code,
そして、それは私の単一のコードは、リストの最初を取得します。しかし、どうすれば一致するものが得られますか?
私はこれがたくさんあったことを知っています。それが理にかなってほしい。ありがとうございました!
EDIT:これは単に製品ごとに複数の行を返すことを除いて
SELECT
l.ID,
p.Code
FROM
dbo.Leads AS l
JOIN QuoteRevisions qr ON qr.LeadID = l.ID
JOIN QuoteRevisionProducts qrp on qrp.QuoteRevisionID = qr.QuoteRevisionID
JOIN Products p on p.ProductID = qrp.ProductID
:
これは(ほとんど)私が探しているSQLです。しかし、少なくともそれはアイデアを与える。
EDIT 2:
Code = l.QuoteRevisions.SelectMany(qr => qr.RevisionProducts).Select(p => p.Product.Code).ToList()
これはエラーをスローしませんが、それは私が必要なものではありません各コード、のためにデータの行を返します。
できません 'Codes = l.QuoteRevisions.SelectMany(qr => qr.SelectMany(qri => qri.QuoteRevisionProduct).Select(p => p.Code)' – KMoussa
答えとして入れることはできますか?qr SelectManyはオプションではありませんが、あなたがどこに向かうのかを確認してください。 –