如何使用LINQ方法语法计算子集合的项目数?

时间:2014-08-04 08:23:44

标签: c# linq methods syntax count

假设我有一个架构,代表问题实体。每个问题都可以投票,投票,或者当然不会投票 - 就像在StackOverflow中一样。我想获得给定用户的投票数量。

int number = (from q in userDbContext.Questions
              from qv in q.QuestionVotes
              where qv.IsVoteUp
              select qv).Count();

我想编写相同的查询,但使用方法语法。如何使用相同的示例执行此操作?

4 个答案:

答案 0 :(得分:20)

您可以使用SelectMany

userDbContext.Questions.SelectMany(x => x.QuestionVotes).Count(x => x.IsVoteUp);

答案 1 :(得分:3)

必须有效:

  int number =  userDbContext.Questions
                             .Select(x => x.QuestionVotes.Count(y => y.IsVoteUp))
                             .Sum();

它将获取每个父项的已过滤子项的计数。然后Sum()将计算这些值的总和。

答案 2 :(得分:3)

LINQ查询演示了如何使用 3级结构tree>执行此操作branch> leaf为例

因此,下面的代码为您提供所有树的所有分支的数量(全部或仅使用给定颜色着色):

public class Calculator
{
    public int CountAllLeafsOn(List<Tree> trees, string сolor = null)
    {
        // Count the leafs (all from all branches of all trees, or only if they are colored with the provided color)
        return сolor == null 
            ? trees.Sum(tree => tree.Branches.Sum(branch => branch.Leaves.Count)) 
            : trees.Sum(tree => tree.Branches.Sum(branch => branch.Leaves.Count(leaf => leaf.Color.Equals(сolor))));
    }
}

public class Tree
{
    public List<Branch> Branches { get; set; }
}

public class Branch
{
    public List<Leaf> Leaves { get; set; }
}

public class Leaf
{
    public string Color { get; set; }
}

希望有所帮助。

答案 3 :(得分:0)

您可以使用以下内容计算儿童:

SELECT * 
FROM (SELECT RGS_Id, r.RGS_DateTime, datediff(ss,r.RGS_DateTime,GETDATE()) diff_value
    from RGS_Registrazione as r
    JOIN RGA_Allarmi as a on r.RGS_MCC_Numero_Serie_MS = a.RGS_MCC_Numero_Serie_MS
    GROUP BY RGS_Id, r.RGS_DateTime) T1
ORDER BY diff_value 
LIMIT 1;