链接选择最后的位置

时间:2011-09-01 09:51:31

标签: c# linq

给出以下结构:一个人有功能。每个职能都有角色。每个角色都有功能。现在我想用linq来判断一个给定的人是否具有某个特征,但我对这个查询做错了。因此,我总是得到函数的计数(但我想得到功能的计数):

var count = person.Functions
                  .Select(fu => fu.Roles
                                  .Select(r => r.Features
                                                .Where(f => f.FeatureId == 99999)))
                  .Count();

我在这里做错了什么?根据这个查询,我希望0(没有得到这个特征)或者1。

2 个答案:

答案 0 :(得分:3)

var query = from function in person.Functions
            from role in function.Roles
            from feature in role.Features
            where feature.FeatureId == 99999
            select feature;

var count = query.Count();

var count = person.Functions
                  .SelectMany(function => function.Roles)
                  .SelectMany(role => role.Features)
                  .Count(feature => feature.FeatureId == 99999);

如果您不需要确切的计数,但只是想知道此人是否具有此功能,请使用Any代替Count

答案 1 :(得分:1)

var count = person.Functions
             .SelectMany(p => p.Roles)
             .SelectMany(r => r.Features)
             .Where(f => f.FeatureId == 99999)
             .Count(); 

我不太确定,但我认为你想要给出Id的功能总数。您可能想要使用SelectMany。