我需要一个Linq查询,如果不是所有行都有来自每个hardware_id列的List<string>
中的匹配字符串,该查询将返回null。
我有下表:
- id(int)-主键
- 名称(字符串)
- user_id(int)
- hardware_id(int)
我有一个包含短语的List<string>
。如果列表中的所有短语在名称行中都有匹配的字符串,我希望查询返回hardare_id编号。如果有一个短语不具有name
匹配,则返回null,并且如果所有短语的每个hardware_id都存在所有短语,则查询应返回hardware_ids的列表,这些hardware_id's中的每一个都与列表中的所有短语完全匹配。
或者换句话说,返回一个hardware_id
的列表,每个id的所有name
都与List<string>
中的相匹配。
我想过在不同的查询中迭代每个Id,但这不是一种有效的方法。也许你知道一个好的查询可以解决这个问题。我使用的是实体框架6/C#/MySQL
注意:查询只针对每个用户id进行。因此,我首先根据用户id筛选表,然后需要找到满足条件的匹配hardare_id。
在hardware_id
上分组,然后查找List
中存在的所有短语
table.GroupBy(x=>x.hardware_id)
.Where(x=> x.All(s=> phrases.Contains(s.name))
.Select(x=>x.Key);