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

C# 查询不适用于所有查询(在哈希中),c#,entity-framework,linq,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(); studyDesignHash

我有以下疑问:

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是一个hashset,它接受一个人输入的所有过滤器,例如cat和dog

var studyDesignHashset = new HashSet<string> { };
等等

但是,我的筛选不起作用。假设此人输入猫和狗作为过滤器。我回来了#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中运行它,它会说
必须声明标量变量“@p_ulinq_u0”。

假设您的
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 });

我从来没有在linq查询中使用过所有内容,所以乍一看它应该可以工作,我会查看跟踪以查看生成的确切SQL,也许这会给你一个想法。它对我很有用。我把它剥离了,实际上我什么也没有得到。(我得到的两个结果来自另一个相关的查询。)我认为您不需要使用
.Distinct()
进行查询。我的SQL连接不允许
.All()
在本地
HashSet
上运行。必须添加此项,这样它就不会抛出错误:IQueryable pq1=db.People;但它仍然返回0。返回0是什么意思?人是空的吗?在你说你得到1分和2分之前(例如任何比赛)。另外,您是否使用过LINQPad?是的,我正在计算结果,结果是0。我还尝试将结果附加到字符串,但字符串仍然为空。我没有使用该程序,也没有时间学习其他应用程序。我尝试打印查询,如果直接运行它,则会出现以下错误:必须声明标量变量“@p_ulinq_u0”。
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 });