Wie gruppiere ich nach 2 untergeordneten Entitäten und erhalte die Summe dieser beiden untergeordneten Entitäten?
Ich möchte bekommentotal variantlauf für meinTest Version 0
d. h.Test Id=100
Dies ist meine Tabelle und Aufzeichnungen:
Prüfung
Id Version
100 0
Varianten:
Id Name Type CategoryId
11 Variant1 Diff 2
12 Variant1 Add 2
13 Variant2 Add 3
14 Variant2 Diff 2
15 Variant3 Add 6
SubVarianten:
Id VariantId Name
66 11 Abc
67 11 PQR
68 11 Xyz
69 12 Abc
70 12 PQR
71 12 Xyz
72 13 Abc
73 13 PQR
74 14 Abc
75 14 PQR
76 14 Xyz
77 15 ABC
78 15 PQR
TestOperation:
Id TestId SourceSubVariantId TargetSubVariantId variation
1 100 69 70 0
1 100 70 71 20
1 100 72 73 90
TestOperationDifference:
Id TestId SourceSubVariantId TargetSubVariantId Unmatch
1 100 66 67 0
1 100 67 68 2
1 100 74 75 7
1 100 75 76 0
1 100 77 78 26
Aus den obigen Aufzeichnungen gehen insgesamt 3 Varianten hervor, die mit 2 Betriebsarten ausgeführt werden, d. H.TestOperation
undTestOperationDifference
und unten sind die 3 Varianten für bestimmteTest 100
:
Variants1(This run in TestOperation)
Variants2(This run in TestOperation)
Variants3(This run in TestOperationDifference)
Diese 3 übergeordneten Varianten werden angezeigt, da alle diese übergeordneten untergeordneten Varianten in 2 Tabellen verwendet werden, d. H.TestOperation und TestOperationDifference.
Um die Gesamtzahl der übergeordneten Varianten zu ermitteln, muss ich aus den Tabellen (TestOperation und TestOperationDifference) herausfinden, dass entsprechende untergeordnete Varianten verwendet werden. Auf dieser Grundlage muss ichcount total parent variants
.
Das ist meine Klasse:
public class Test
{
public int Id { get; set; }
public string Version { get; set; }
public virtual ICollection<TestOperation> TestOperation { get; set; }
public virtual ICollection<TestOperationDifference> TestOperationDifference { get; set; }
}
public class TestOperation
{
public int Id { get; set; }
public Nullable<int> TestId { get; set; }
public int SourceSubVariantId { get; set; }
public int TargetSubVariantId { get; set; }
public int variation { get; set; }
public virtual SubVariants SubVariants { get; set; }
public virtual SubVariants SubVariants1 { get; set; }
public virtual Test Test { get; set; }
}
public class TestOperationDifference
{
public int Id { get; set; }
public Nullable<int> TestId { get; set; }
public int SourceSubVariantId { get; set; }
public int TargetSubVariantId { get; set; }
public int unmatch { get; set; }
public virtual SubVariants SubVariants { get; set; }
public virtual SubVariants SubVariants1 { get; set; }
public virtual Test Test { get; set; }
}
public class Variants
{
public int Id { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public int CategoryId { get; set; }
public virtual ICollection<SubVariants> SubVariants { get; set; }
public virtual Category Category { get; set; }
}
public class SubVariants
{
public int Id { get; set; }
public int VariantId { get; set; }
public string Name { get; set; }
public virtual Variants Variants { get; set; }
public virtual ICollection<TestOperationDifference> TestOperationDifference { get; set; }
public virtual ICollection<TestOperationDifference> TestOperationDifference1 { get; set; }
public virtual ICollection<TestOperation> TestOperation { get; set; }
public virtual ICollection<TestOperation> TestOperation1 { get; set; }
}
Meine Frage:
var data =(from mk in context.Test
select new
{
TotalVariants = (mk.TestOperation.Select(t => t.SubVariants).Count()
+
mk.TestOperationDifference.Select(t => t.SubVariants).Count())
}).ToList();
Ausgabe: 8
Erwartete Ausgabe: 3