Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq-多个字段上的分组和计数(单个总计上的输出)_C#_Linq_Razor - Fatal编程技术网

C# Linq-多个字段上的分组和计数(单个总计上的输出)

C# Linq-多个字段上的分组和计数(单个总计上的输出),c#,linq,razor,C#,Linq,Razor,我有一个带有查询答案的应用程序(50个字段,名称如upa1、upa2、upd1、upd6等,可能值为“y”、“n”和“na”) 我可以通过以下方法获得并计算一个字段: foreach(var y in items.GroupBy(g => g.upa1) .Select(group => new {upa1name = group.Key, upa1count = group.Count()})) { <div>Thes

我有一个带有查询答案的应用程序(50个字段,名称如upa1、upa2、upd1、upd6等,可能值为“y”、“n”和“na”)

我可以通过以下方法获得并计算一个字段:

foreach(var y in items.GroupBy(g => g.upa1)
                      .Select(group => new {upa1name = group.Key, upa1count = group.Count()})) {
    <div>These are the totals for upa1:</div>
    <div>@y.upa1name : @y.upa1count</div>
}
我可以对所有问题手动重复此操作,但我需要计算所有问题的“y”、“n”和“na”数,以形成此单一输出:

These are the totals for all questions:
y : 1342
n : 879
na : 445
我知道已经有数百个关于这些问题的主题,但是信息太多了,而且在这个问题上有太多的变化(不同的表、连接等)。“多个字段的总和计数”中没有任何内容

谢谢


另外,在旁注中,每一行仅在答案至少存在一次时出现,但我需要它显示,即使它是“y:0”。这可能吗?

只有三个可能的答案,您可以在三个单独的查询中执行此操作:

foreach (var ans in new[] {"y", "n", "na"}) {
    var count = items.Sum(item =>
        (item.upa1==ans?1:0) + (item.upa2==ans?1:0) + (item.upd1==ans?1:0) + ...
    );
    <div>These are the totals for @ans:</div>
    <div>@ans : @count</div>
}
foreach(新[]{“y”、“n”、“na”}中的var ans){
变量计数=项。总和(项=>
(item.upa1==ans?1:0)+(item.upa2==ans?1:0)+(item.upd1==ans?1:0)+。。。
);
以下是@ans的总数:
@答:@伯爵
}

这应该运行得相当快。

只有三个可能的答案,您可以在三个单独的查询中执行此操作:

foreach (var ans in new[] {"y", "n", "na"}) {
    var count = items.Sum(item =>
        (item.upa1==ans?1:0) + (item.upa2==ans?1:0) + (item.upd1==ans?1:0) + ...
    );
    <div>These are the totals for @ans:</div>
    <div>@ans : @count</div>
}
foreach(新[]{“y”、“n”、“na”}中的var ans){
变量计数=项。总和(项=>
(item.upa1==ans?1:0)+(item.upa2==ans?1:0)+(item.upd1==ans?1:0)+。。。
);
以下是@ans的总数:
@答:@伯爵
}

这应该运行得相当快。

假设您有这样一个类:

public class Inquiry
{
    public string UpaName { get; set; }
    public string UpaValue { get; set; }
}
[DebuggerDisplay("{UpaName,nq} y:{y,nq} n:{n,nq} na:{na,nq}")]//include Sysytem.Diagnostics
public class InquirySummary
{
    public string UpaName { get; set; }
    public int y { get; set; }
    public int n { get; set; }
    public int na { get; set; }
}
现在让我们用一些测试数据填充该列表:

var list = new List<Inquiry>()
{
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
    new Inquiry() { UpaName = "upa1", UpaValue = "n" },
    new Inquiry() { UpaName = "upa1", UpaValue = "na" },
    new Inquiry() { UpaName = "upa2", UpaValue = "y" },
    new Inquiry() { UpaName = "upa2", UpaValue = "n" },
    new Inquiry() { UpaName = "upa2", UpaValue = "na" },
    new Inquiry() { UpaName = "upa2", UpaValue = "na" },
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
    new Inquiry() { UpaName = "upa2", UpaValue = "n" },
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
};
我们可以实例化一个键值字典,其中key是您的查询答案,value是我们的InquirySummary类的一个实例

var summary = new Dictionary<string, InquirySummary>();

这将基本上给我们的字典作为种子,然后我们将开始在列表中循环。首先,if条件将检查该键是否已经存在于dicitonary中,然后simpy将对该值调用sumarize操作。否则,我们将创建一个新的InquirySummary对象,并将Summarize转换为他。每次我们返回案例词典中的种子时。

假设您有这样一个类:

public class Inquiry
{
    public string UpaName { get; set; }
    public string UpaValue { get; set; }
}
[DebuggerDisplay("{UpaName,nq} y:{y,nq} n:{n,nq} na:{na,nq}")]//include Sysytem.Diagnostics
public class InquirySummary
{
    public string UpaName { get; set; }
    public int y { get; set; }
    public int n { get; set; }
    public int na { get; set; }
}
现在让我们用一些测试数据填充该列表:

var list = new List<Inquiry>()
{
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
    new Inquiry() { UpaName = "upa1", UpaValue = "n" },
    new Inquiry() { UpaName = "upa1", UpaValue = "na" },
    new Inquiry() { UpaName = "upa2", UpaValue = "y" },
    new Inquiry() { UpaName = "upa2", UpaValue = "n" },
    new Inquiry() { UpaName = "upa2", UpaValue = "na" },
    new Inquiry() { UpaName = "upa2", UpaValue = "na" },
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
    new Inquiry() { UpaName = "upa2", UpaValue = "n" },
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
    new Inquiry() { UpaName = "upa1", UpaValue = "y" },
};
我们可以实例化一个键值字典,其中key是您的查询答案,value是我们的InquirySummary类的一个实例

var summary = new Dictionary<string, InquirySummary>();

这将基本上给我们的字典作为种子,然后我们将开始在列表中循环。首先,if条件将检查该键是否已经存在于dicitonary中,然后simpy将对该值调用sumarize操作。否则,我们将创建一个新的InquirySummary对象,并将Summarize转换为他。每次我们返回案例字典中的种子时。

现在更改它可能有点晚了,但是更好的数据模型可以帮您解决这个问题。问题不应该在单独的字段中,而是在问题集合中,每个问题都有名称、内容和答案集合。一点也不晚。我可以尝试以优化的格式制作一个表格,如questionaireID、question、answer。因此,如果你能给我举个例子的话,每个问卷将在表格中放置50多行,如“1088”、“upa1”、“y”和“1088”、“upa2”、“n”等,或者任何其他格式。现在更改它可能有点晚,但更好的数据模型会帮你省去这个问题。问题不应该在单独的字段中,而是在问题集合中,每个问题都有名称、内容和答案集合。一点也不晚。我可以尝试以优化的格式制作一个表格,如questionaireID、question、answer。因此,如果你能给我举个例子,每个问卷将在表格中放置50多行,如“1088”、“upa1”、“y”和“1088”、“upa2”、“n”等,或任何其他格式。看起来很简单,但这意味着使用自定义控制器。由于我还没有真正涉猎过2sxc定制API设计的东西,所以最好使用只查看的解决方案。@JoãoGomes这种方法应该有效,只要您将所有名称放在比较链中,而不是上面的
。太好了。简单,容易,易懂。我喜欢这个解决方案。谢谢。看起来很简单,但这意味着要使用自定义控制器。由于我还没有真正涉猎过2sxc定制API设计的东西,所以最好使用只查看的解决方案。@JoãoGomes这种方法应该有效,只要您将所有名称放在比较链中,而不是上面的
。太好了。简单,容易,易懂。我喜欢这个解决方案。谢谢。这与我的理解相去甚远。它需要为控制器定制API。最好是一个更简单的视图解决方案。不需要自定义API。把它放在一个扩展方法中,并在您的视图中调用它。这与我的理解相去甚远。它需要为控制器定制API。最好是一个更简单的视图解决方案。不需要自定义API。将其放在扩展方法中,并在视图中调用它。