2013-07-03 112 views
1

因此,我從人員表格中進行選擇,並且需要選擇該人員所在組的組ID。我該如何做到這一點。如何使用LINQ從數據庫中選擇多個項目

到目前爲止,我有:

var p = (from p in Context.Person 
     join g in Context.Group 
     on p.PersonId equals g.PersonId 
     select new 
     { 
      Name = p.Name, 
      Age = p.Age, 
      groupIds = ????? 
     } 

所以分組表這將是GroupIdPersonId所以我需要選擇所有的組ID主鍵。如何才能做到這一點?

回答

6

你想要一個GroupJoin而非Join。不同的是,而不是讓所有展平爲對列表中的相關項目的,它組中的所有接合物品進入的序列組成:

var query = from p in Context.Person 
      join g in Context.Group 
      on p.PersonId equals g.PersonId into groups 
      select new 
      { 
       Name = p.Name, 
       Age = p.Age, 
       groupIds = groups.Select(g => g.GroupId), 
      }; 

使用查詢語法使用into關鍵字連同join將導致GroupJoin而不是Join

+0

據我瞭解@Pitfall希望groupIds,但你選擇了PersonIds。我們不需要首先加入兩個entityset,因爲ObjectContext實體有主鍵。所以他們是唯一的在這個上下文就我 –

+0

@DavutGürbüz你從組中選擇的內容足以改變,但是是的,我想他不希望使用人員ID。至於是否可以更好地進行聯合與內部查詢,已經完成了,它將取決於DB配置以及它如何最終優化每個查詢。它可能會將你的查詢轉換成這樣的結果,如果結果是可以比較的話,但如果結果不一致的話,它最終可能會反覆對組進行大量查詢,而不是僅僅將它們分組。你需要在他的數據上運行它們以查看哪個更適合。 – Servy

+0

在我的回答的第一評論中,他說他需要groupID。 'groupIds = groups.Select(g => g.GroupId),'Missing',' –

2

我在SO的編輯器上編碼。如果我明白你想要人的團體。 否則請糾正我。

var p = from p in Context.Person   
    select new 
    { 
     Name = p.Name, 
     Age = p.Age, 
     groups = from g in Context.Group 
        where p.PersonId == g.PersonId 
        select g.GroupId 
    }; 
+0

我需要組ID,我知道如何根據您的示例獲得,但是我立即得到語法錯誤,從「g in ....」中的所有內容都以紅色加下劃線並帶有多個錯誤 – Pittfall

+0

Are you sure?我看到'var p =''可以是'('這個字母會導致錯誤,對於Id,我可以在編輯時選擇ID字段,對於整個對象,你可以選擇g本身 –

+0

@Pittfall Davut簡直就是缺少'從'關鍵字開始內部查詢 – Servy

相關問題