我有以下查询:
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".
答案 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 });