首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ回调对象图

LINQ回调对象图
EN

Stack Overflow用户
提问于 2009-06-03 03:11:47
回答 2查看 635关注 0票数 0

在LINQ中可以按多个组进行分组吗?

例如,我有这个查询(显然是不完整的)

代码语言:javascript
复制
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

..。我想回到一些公司,这些公司有一大堆地点,而这些公司又有一大群人。

EN

回答 2

Stack Overflow用户

发布于 2009-06-03 03:23:03

如果您希望按多个参数分组,这是可能的:

代码语言:javascript
复制
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()
}
票数 1
EN

Stack Overflow用户

发布于 2009-06-04 14:14:19

我最终使用了以下代码来实现我想要的功能。有趣的注意:注意,我想将角色展平并用逗号连接,所以我使用了一个使用聚合操作符的包装器访问器来实现这一点。显然,在LINQ查询中不支持聚合运算符,因为您得到的是"the query operator "Aggregate" is not supported",否则我就会像下面的Roles = new List<string>(g.Select(u => u.pr.RoleName)).Aggregate((a, b) => a + ", " + b)一样在这里内联地执行它

代码语言:javascript
复制
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()
                       });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/942894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档