2013-01-22 42 views
0

我希望能拉包含產品的最後一個發票的類別 類別 - >產品展示 - >發票加入所有的子表一起,搶到第一個

(from p as Product in cat 
where p.InvoiceList.Where(function(o) o.InvoiceDate >= MAX_ONE) 
select p.InvoiceList.Where(function(o) o.InvoiceDate >= MAX_ONE) 
).FirstOrDefault() 

我好像不太可能包裝我的頭如何做到這一點。

編輯:將實現我的目標的示例SQL語句。如果我只能把它翻譯...

SELECT TOP 1 i.InvoiceID, i.InvoiceDate, i.TotalAmount 
FROM   Category as c INNER JOIN 
        Product as p ON p.categoryID = c.categoryID INNER JOIN 
        InvoiceProducts as ip ON ip.productID = p.productID INNER JOIN 
        Invoice as i ON ip.InvoiceID = i.InvoiceID 
WHERE  c.categoryID = 3 
ORDER BY InvoiceDate DESC 
+0

的LINQ提供['.LastOrDefault()'](http://msdn.microsoft.com/en-us/library/system .linq.enumerable.lastordefault.aspx)方法。可能會更容易。 –

+0

你能否澄清你到底需要什麼?每個類別的最後一張發票?所有類別的最後一張發票?或者是其他東西? – svick

回答

1
cat.SelectMany(p => p.InvoiceList).OrderBy(o => o.InvoiceDate).LastOrDefault(); 
+1

太棒了,這是我需要的。關鍵是「SelectMany」它讓我在需要去的地方。 – Steve

+0

好奇心在查詢語法中,這看起來像什麼? – Steve

+0

@Steve:由於'SelectMany'沒有查詢語法 –

0
var lastInvoice = (from i in context.Invoices 
    .where i.Product.CategoryId == categoryId 
    .select i) 
     .OrderByDescending(i=>i.IbvoiceDate) 
     .FirstOrDefault(); 
+0

什麼是'context'?這是一個存儲庫對象? –

+0

是的,實體從哪裏來的背景,即:EntitiesContainer –

+0

這似乎並不是OP所做的。 :) –

相關問題