好吧,我會盡力讓這個有意義。LINQ:通過多個導航填充列表<>
在模型中,鉛等性質,我們有這些:
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的對象,該對象具有多個屬性。這裏有兩個:
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,
而這將得到我一個單一的代碼,列表中的第一個。但是我如何得到所有匹配的?
我知道這是很多要遵循的。我希望這是有道理的。謝謝!
編輯:
這是(幾乎)是我在尋找的SQL:
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
除此之外,這將只是每個產品返回多行。但是,至少它提供了一個想法。
編輯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作爲選項,但是我知道你在哪裏。 –