查询使用Entity Framework过滤逗号分隔的字符串表条目?

时间:2011-12-23 19:43:16

标签: entity-framework-4

我有一个包含以下列的表:

  

equipment_id | equipment_name |部门标识

department_id以逗号分隔的id字符串存储(即1,4,5,7)

鉴于department_id,我想获得与该部门ID相关联的所有设备项目。

只是想知道是否有一种优雅的方式来编写查询,或者我是否必须抓取每个设备项,拆分department_id列,检查id是否匹配,并将设备项添加回单独的列表?

3 个答案:

答案 0 :(得分:1)

是否有正确的数据标准化?单个列不应包含逗号分隔的ID字符串。

否则,与正确规范化的数据库相比,您对特定问题的大多数答案都会表现不佳。

答案 1 :(得分:0)

这里有两个主要选项

  1. 使用返回整数列表的UDF进行拆分。您可以在EF中映射此UDF并直接调用它。

  2. 返回后在代码中拆分。如果您对该项使用存储库层,则对调用者的影响很小,因为他们只是从处理拆分的存储库请求它。

答案 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;