我有一个包含以下列的表:
equipment_id | equipment_name |部门标识
department_id以逗号分隔的id字符串存储(即1,4,5,7)
鉴于department_id,我想获得与该部门ID相关联的所有设备项目。
只是想知道是否有一种优雅的方式来编写查询,或者我是否必须抓取每个设备项,拆分department_id列,检查id是否匹配,并将设备项添加回单独的列表?
答案 0 :(得分:1)
是否有正确的数据标准化?单个列不应包含逗号分隔的ID字符串。
否则,与正确规范化的数据库相比,您对特定问题的大多数答案都会表现不佳。
答案 1 :(得分:0)
这里有两个主要选项
使用返回整数列表的UDF进行拆分。您可以在EF中映射此UDF并直接调用它。
返回后在代码中拆分。如果您对该项使用存储库层,则对调用者的影响很小,因为他们只是从处理拆分的存储库请求它。
答案 2 :(得分:0)
这是一个解决方案,它将返回包含特定department_id的所有记录。
var start = department_id + ",";
var end = "," + department_id;
var contains = "," + department_id + ",";
var results = from e in context.Equipment
where (e.department_id.StartsWith(start)
|| e.department_id.EndsWith(end)
|| e.department_id.Contains(contains)
|| e.department_id.Equals(department_id))
select e;