2011-07-08 52 views
1

我有一個實體與其他實體(相關實體)有關聯。我試圖從主實體返回不同的行,需要包含來自相關實體的數據,以便我可以在下游使用一個相關實體的屬性。如何從相關實體中返回不同的行和實體

下面是我正在使用的語句,但它沒有返回任何行。什麼是最好的方法來做到這一點?

以下是我的代碼。

return context.UserDisplays.Include("CurrentJob").Where(d => d.UserName == userName).GroupBy(d => d.CurrentJob.JobNo).Select(g => g.FirstOrDefault()).ToList(); 

任何幫助將不勝感激!

回答

1

編輯 - 對於ComplexProperty

我相信一旦你做一個GroupBy所有Include方法被忽略。因此,您需要重複列表並在每個項目上調用LoadProperty方法。它應該是這個樣子

var list = context.UserDisplays 
        .Where(d => d.UserName == userName) 
        .GroupBy(d => d.CurrentJob.JobNo) 
        .Select(g => g.FirstOrDefault()).ToList(); 

foreach(var item in list) 
{ 
    context.LoadProperty(item, "CurrentJob"); 
} 

return list; 

Resource Link

+0

你能澄清你被CurrentJobReference是什麼意思?這是相關的實體嗎?如果是這樣,則ComplexProperty(CurrentJob)不會在智能感知中顯示Load()方法。有什麼缺失? – Rich

+0

我更新了ComplexProperty – Aducci

+0

的答案,謝謝!這很好! – Rich

1

檢查出鮮明的(集合運算符)本文 http://msdn.microsoft.com/en-us/vcsharp/aa336746 你問了鮮明UserDisplays的部分?或不同的用戶或Disticnt工作?

我會嘗試這樣說

var object = (from userDisplay in context.UserDisplays.Include("CurrentJob") 
.Where userDisplay.UserName == userName 
Select userDisplay).Distinct(); 

(對不起,我去關我的VB風格,但它應該是差不多的...)

+0

我也試試看看http://blogs.msdn.com/b/marcinon/archive/2010/01/14/building-custom-linq-expressions-made-easy-with-dynamicqueryable_2e00_.aspx theres some awesome 「獨特」的例子附近的底部 –

+0

VB風格是很好的......我感謝幫助。我想要UserDisplays中獨特的JobID。每個顯示器都有多個作業。我會檢查文章並按摩你的例子,看看我想出了什麼,併發布結果。 – Rich

+0

如果您只是想將JobIDs作爲整數列表而不是實際對象,那麼在您的選擇行上執行Select userDisplay.JobNo).Distinct();它只會阻擋那些不同的ID。 –