查询不适用于所有人(在哈希中)

时间:2017-05-05 17:29:35

标签: c# entity-framework linq

我有以下查询:

var People = db.People
.Where(p => studyDesignHashset.All(x => p.StudyDesign.StartsWith(x) || p.StudyDesign.EndsWith(x) || p.StudyDesign.Contains("|" + x + "|")))
.Select(c => new { p.ID, p.StudyDesign }).Distinct();

studyDesignHashset是一个哈希集,它接受一个人输入的所有过滤器,例如猫和狗。

var studyDesignHashset = new HashSet<string> { };

表db.People设置如下:

ID    StudyDesign
1     cat|dog
2     bird|fish|cat

等等。

但是,我的过滤无效。假设此人输入猫和狗的过滤器。我回到#1和#2,这是不正确的。我在查询逻辑上做错了什么?

感谢您的帮助。

修改

当我尝试这个时:

var pq1 = db.People;
foreach (var f in studyDesignHashset)
    pq1 = pq1.Where(p => p.StudyDesign.StartsWith(f) || p.StudyDesign.EndsWith(f) || p.StudyDesign.Contains("|" + f + "|"));

var People = pq1.Select(c => new { p.ID, p.StudyDesign });

我得到0结果。我打印了SQL语句,如果我直接在SQL Server中运行它,它会显示Must declare the scalar variable "@p__linq__0".

1 个答案:

答案 0 :(得分:0)

假设您的HashSet很小,您可以将每个条件放在查询中

var pq1 = db.People;
foreach (var f in studyDesignHashset)
    pq1 = pq1.Where(p => p.StudyDesign.StartsWith(f) || p.StudyDesign.EndsWith(f) || p.StudyDesign.Contains("|" + f + "|"));

var People = pq1.Select(c => new { p.ID, p.StudyDesign });