2009-06-03 7 views
0

LINQで複数のグループをグループ化することはできますか?LINQでオブジェクトグラフを取り戻す

は例えば、私は

from lxr in LOCATION_XREFs 
    join l in LOCATIONs on lxr.LOCATION_SKEY equals l.LOCATION_SKEY 
    join c in COMPANies on l.COMPANY_SKEY equals c.COMPANY_SKEY 
    join prlx in PeopleRoleLocationXrefs on lxr.LOCATION_XREF_SKEY equals prlx.LOCATION_XREF_SKEY 
    join p in PEOPLEs on prlx.PEOPLE_SKEY equals p.PEOPLE_SKEY 
    join pr in PeopleRoles on prlx.PeopleRoleKey equals pr.PeopleRoleKey 

(明らかに不完全)このクエリを持っている...と私は戻って今度は、持っている、場所の束を持っている企業の束を取得したいのですがたくさんの人達。

+0

のようにインライン右がそれを行っているでしょうあなたがグループしようとしている取得...またはあなたがオブジェクトを構築したいそうであるように、LINQクエリ内suuportedされていませんグラフ?グループ化はフラットな結果セットを返しますが、あなたの質問に基づいて、オブジェクトグラフが必要なように聞こえます。 – jrista

+0

あなたは正しいです、私はオブジェクトグラフが必要です。違いを詳しく教えてください。私はそれに応じて私の投稿を修正します(または他の人がそうするかもしれません、私が "コミュニティwiki"としたように)-Thanks –

答えて

1

あなたが複数のパラメータによってグループに探しているなら、それは可能である:

from lxr in LOCATION_XREFs 
    join l in LOCATIONs on lxr.LOCATION_SKEY equals l.LOCATION_SKEY 
    join c in COMPANies on l.COMPANY_SKEY equals c.COMPANY_SKEY 
    join prlx in PeopleRoleLocationXrefs on lxr.LOCATION_XREF_SKEY equals prlx.LOCATION_XREF_SKEY 
    join p in PEOPLEs on prlx.PEOPLE_SKEY equals p.PEOPLE_SKEY 
    join pr in PeopleRoles on prlx.PeopleRoleKey equals pr.PeopleRoleKey 
group c by new { c.COMPANY_SKEY, l.LOCATION_SKEY} into myGroup 
select new 
{ 
    myGroup.Key.COMPANY_SKEY, 
    myGroup.Key.LOCATION_SKEY, 
    myGroup.Count() 
} 
+0

実際、jristaへの私のコメントを参照してください。私はオブジェクトグラフを探しています。申し訳ありませんが、私の誤解は私の誤解のために誤解を招いていました。それは言った、私はこの質問dup'dかもしれないと思う: http://stackoverflow.com/questions/740063/loading-complete-graph-from-sql-using-linq –

0

私は最終的に私が欲しかったものを達成するために、次のコードを使用していました。興味深い注記:ロールを平らにしてコンマで連結したかったので、Aggregate演算子を使用するラッパーアクセサを使用してこれを行いました。どうやら集計演算子は、あなたが"the query operator "Aggregate" is not supported"がそうでなければ、私はこのRoles = new List<string>(g.Select(u => u.pr.RoleName)).Aggregate((a, b) => a + ", " + b)

public class DAOPerson 
{ 
    public string Name { get; set; } 
    public int PeopleSkey { get; set; } 
    public List<string> RolesCollection { get; set; } 
    public string Roles 
    { 
     get { return RolesCollection.Aggregate((a, b) => a + ", " + b); } 
    } 
} 

IQueryable<DAOLocation> gridData; 
gridData = (from lxr in db.LOCATION_XREFs 
      join l in db.LOCATIONs on lxr.LOCATION_SKEY equals l.LOCATION_SKEY 
      join c in db.COMPANies on l.COMPANY_SKEY equals c.COMPANY_SKEY 
      where lxr.DEPARTMENT_NUMBER == Department.BINDING_AUTHORITY_KEY 
        && lxr.BRANCH_NUMBER == Branch.ATLANTAKEY 
      orderby c.NAME, l.INTERNAL_NAME ascending 
      select new DAOLocation 
         { 
          CompanyName = c.NAME, 
          CompanySkey = c.COMPANY_SKEY, 
          LocationName = l.INTERNAL_NAME, 
          LocationSkey = l.LOCATION_SKEY, 
          Persons = (from prlx in db.PeopleRoleLocationXrefs 
             join lxr2 in db.LOCATION_XREFs on prlx.LOCATION_XREF_SKEY equals lxr.LOCATION_XREF_SKEY 
             join p in db.PEOPLEs on prlx.PEOPLE_SKEY equals p.PEOPLE_SKEY 
             join pr in db.PeopleRoles on prlx.PeopleRoleKey equals pr.PeopleRoleKey 
             where lxr2.LOCATION_SKEY == l.LOCATION_SKEY 
             group new { p, pr } by p.PEOPLE_SKEY into g 
             select new DAOPerson 
               { 
                Name = g.First().p.LAST_NAME, 
                PeopleSkey = g.First().p.PEOPLE_SKEY, 
                RolesCollection = new List<string>(g.Select(u => u.pr.RoleName)) 
               }).ToList() 
         }); 
関連する問題