型号:
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
答案 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
。