检查物料需求清单

时间:2018-11-14 12:40:26

标签: c# linq

型号:

MaterialTemplate{
    int id,
    MaterialType materialType,
    int length,
    int width,
    int complexity
}

Material{
    int id,
    MaterialType materialType,
    int length,
    int width,
    int complexity,
    int saleType
}

我有 List<MaterialTemplate> requiredMaterialTemplates;

我想检查每个必需的材料模板在材料表中是否可用(具有2倍的可用性,其中“ 2倍”是可配置的)。

我可以通过遍历requiredMaterialTemplates并使用linq查询一个接一个地实现这一点,但是有什么方法可以使用linq(对SQL的一个查询)一次检查所有requiredMaterialTemplates

另外,如果提供的可用性是2倍,而又不循环requiredMaterialTemplates中的每个模板,那么我们如何获得每个材料模板所需的材料数量。

示例:

所需材料的可用性值为2x

MaterialTemplateId:1,MaterialType:"Bronze",Complexity:"Solid"
MaterialTemplateId:2,MaterialType:"Silver",Complexity:"Solid",Length:10

db中的材料

1,"Bronze",10,5,"Solid","Limited"
2,"Bronze",20,6,"Solid","Limited"
3,"Silver",10,5,"Solid","Limited"
4,"Copper",10,5,"Solid","Limited"

结果应该是

MaterialTemplateId, Required Count
1,0
2,1

2 个答案:

答案 0 :(得分:0)

我认为您可以使用group by来获取您拥有两次或多次的所有materialType。 像这样:

from m in Material
group m by m.MaterialType into grp
where grp.Count() > 1
select grp.Key

答案 1 :(得分:0)

如果我理解正确,那么您需要什么:

from material in availableMaterials
join template in requiredMaterialTemplates 
  on new { material.materialType, material.length, material.width, material.complexity }
  equals new { template.materialType, template.length, template.width, template.complexity }
where material.quantity < 2
select material

在这里,我假设您有List<Material> availableMaterials