所以我在一個asp.net mvc項目的Linq-To-Entities。稍微複雜多對多linq查詢讓我卡住
我總是會對這種查詢感到困惑。
我的模式是:
ProductTag
+TagName
+<<ProductNames>>//Many-to-many relationship
ProductName
+FullName
+<<Tag>>//Many-to-many relationship
PurchaseRecord
+Amount
+<<ProductName>>//one productname can be linked to Many purchase records.
我需要得到和所有購買的一個給定的標籤。
這是我試過的。
ProductTag thetag//could be some tag
decimal total = myentities.PurchaseRecords
.Where(x => thetag.ProductNames.Any
(a => a.FullName == x.ProductName.FullName))
.Sum(s => s.Amount);
我試着改變一些事情,用Contains
試過,但我知道我根本錯誤的地方。
我不斷收到:
無法創建類型的恆定值「產品名稱」。在此上下文中僅支持基本類型(如Int32,String和Guid)。
更新 所以與它下面@Alexandre Brisebois的幫助工作只是這樣的:
var total= item.ProductNames.SelectMany(x => x.PurchaseRecords)
.Sum(s => s.Amount);
對不起,如果我的代碼是不明確的。 'GetAll()'就是我調用'entitiescontext'的庫。更新的問題。你能舉一個例子來說明你的第一句話嗎?我會通過什麼? – gideon 2011-04-14 17:59:39
好吧我想我明白了,但這意味着我將不得不像'foreach(item in tag.ProductName)=>找到具有該項目的PurchaseRecords'right? – gideon 2011-04-14 18:06:33
非常好!謝謝非常多的Alenxandre這工作:'var total = item.ProductNames.SelectMany(x => x.PurchaseRecords).Sum(s => s.Amount);'我還沒有掌握在我的腦海中,我會寫這個作爲一個linq查詢(查詢符號),但我很高興它的工作原理。 – gideon 2011-04-14 18:28:56