如何由2个子实体进行分组,并获得这两个子实体的总和?
我想要得到我的Test Version 0
即Test Id=100
总变种运行
这是我的表格和logging:
testing:
Id Version 100 0
变种:
Id Name Type CategoryId 11 Variant1 Diff 2 12 Variant1 Add 2 13 Variant2 Add 3 14 Variant2 Diff 2 15 Variant3 Add 6
SubVariants :
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
所以从上面的logging来看, total 3 variants
运行在2
types的操作上,即TestOperation
和TestOperationDifference
,以下是针对具体Test 100
的三种变体:
Variants1(This run in TestOperation) Variants2(This run in TestOperation) Variants3(This run in TestOperationDifference)
这上面的3个父变体会来,因为所有这些父子变体被用在2个表中,即TestOperation和TestOperationDifference。
因此,为了find总的父变体,我需要从两个表(TestOperation和TestOperationDifference)中找出相应的子变体,并基于此我需要count total parent variants
。
这是我的class级:
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; } }
我的查询:
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();
输出:8
预期产出:3
任何人都可以帮助我吗?
对不起,如果问题似乎是如此之大。
更新
好的学习,这里是一个解决scheme..
var tot_variants_for_test = (from v_name in (from t_op in test select new { v_name = t_op.TestOperation.Select(sv => sv.SubVariants.Variants.Name) } ).First().v_name select v_name) .Union( (from v_name in (from t_opdf in test select new { v_name = t_opdf.TestOperationDifference.Select(sv => sv.SubVariants.Variants.Name) } ).First().v_name select v_name)) .Count();
假设我理解了你的困惑描述,从我的头顶开始。 我认为你需要来自TestOperation
和TestOperationDifference
联合变体,然后区分和计数它们。 不知道这是否会在EF工作。
let toQuery = context.Test.SelectMany(mk=>TestOperation.Select(t=>t.SubVariants.Variants)); let todQuery = context.Test.SelectMany(mk=>TestOperationDifference.Select(t=>t.SubVariants.Variants)); let total = toQuery.Concat(todQuery).Disctinct().Count;
另外,你的命名很混乱。 您使用复数作为单项引用,并且您的模型中的SourceControlDetailId
不在表中,并且具有SubVariants
和SubVariants1
而不是SourceSubVariant
和TargetSubVariant
。 我会build议先解决这个问题。
from test in Tests where version == 0 let opsVariants = test.TestOperations .SelectMany(x => x.SourceSubVariant.Variant).Distinct() let diffsVariants = test.TestOperationDifferences .SelectMany(x => x.SourceSubVariant.Variant).Distinct() let variants = opsVariants.Union(diffsVariants) select variants.Count();
- 我如何发布MVC中的项目列表
- 在asp.net-mvc中如何连接Application_BeginRequest()
- 处理CORS预检请求到ASP.NET MVC操作
- log4net将在哪里创build这个日志文件?
- VS 2012上没有ASP.NET MVC 5 Web应用程序模板?
- 如何validationASP.NET MVC中上传的文件?
- 混合Angular和ASP.NET MVC / Web API?
- 是否可以在自定义的AuthorizeAttribute类中使用RedirectToAction()?
- Html.Partial与Html.RenderPartial&Html.Action与Html.RenderAction