Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net LINQ到实体查询,其中.Where子句未按预期进行筛选_.net_Entity Framework_Linq To Entities - Fatal编程技术网

.net LINQ到实体查询,其中.Where子句未按预期进行筛选

.net LINQ到实体查询,其中.Where子句未按预期进行筛选,.net,entity-framework,linq-to-entities,.net,Entity Framework,Linq To Entities,我正在为我的学习做一个项目。在为我的应用程序构建搜索引擎的过程中,我以如下代码结束: public List<Document> FindDocument(string docName, Company company, Department departament, Worker worker, DateTime? enterDate, Da

我正在为我的学习做一个项目。在为我的应用程序构建搜索引擎的过程中,我以如下代码结束:

public List<Document> FindDocument(string docName, Company company,
                                   Department departament, Worker worker, 
                                   DateTime? enterDate, DateTime? expDate, 
                                   State state)
{
    IQueryable<Document> query = context.Documents
                .Include(p => p.Department)
                .Include(p => p.Company)
                .Include(p => p.State)
                .Include(p => p.Workers); 
    if (docName != null)
        query.Where(p => p.DocumentName.Contains(docName));
    if (company != null)
        query.Where(p => p.Company.Equals(company));
    if (departament != null)
        query.Where(p => p.Department.Equals(departament));
    if (worker != null)
        query.Where(p => p.Workers.Contains(worker));
    if (enterDate.HasValue)
        query.Where(p => p.EnterDate.Equals(enterDate.Value));
    if (expDate.HasValue)
        query.Where(p => p.ExpDate.Equals(expDate.Value));
    if (state != null)
        query.Where(p => p.State.Equals(state));

    return query.ToList();              
}
公共列表查找文件(字符串docName、公司、,
部门部门,工人,
日期时间?输入日期,日期时间?输出日期,
州(州)
{
IQueryable query=context.Documents
.包括(p=>p.部门)
.包括(p=>p.公司)
.包括(p=>p.State)
.包括(p=>p.工人);
if(docName!=null)
其中(p=>p.DocumentName.Contains(docName));
如果(公司!=null)
其中(p=>p.Company.Equals(Company));
if(department!=null)
其中(p=>p.Department.Equals(Department));
if(worker!=null)
其中(p=>p.Workers.Contains(worker));
如果(输入日期.HasValue)
其中(p=>p.EnterDate.Equals(EnterDate.Value));
if(expDate.HasValue)
其中(p=>p.ExpDate.Equals(ExpDate.Value));
如果(状态!=null)
其中(p=>p.State.Equals(State));
返回query.ToList();
}
搜索条件是可选的,因此我需要检查是否有任何条件为空。如果不使用此标准,则其值为空


这个查询的问题是它总是返回所有文档,而不仅仅是满足条件的文档。我在运行时与调试器进行了检查,以确保如果指定了值,则会计算
if
语句体。

您的问题是假设
可枚举。其中
修改现有查询。它没有-它返回一个新查询。您需要将调用的结果分配给
Where
返回到
query
变量:

query = query.Where(p => ... );

您的问题是假定
可枚举。其中
修改现有查询。它没有-它返回一个新查询。您需要将调用的结果分配给
Where
返回到
query
变量:

query = query.Where(p => ... );

您需要更改以下语句:

query.Where(...)


否则您不会更改任何内容,只需调用函数而不获取结果

您需要更改语句:

query.Where(...)


否则,您不会更改任何内容,只需调用函数而不获取结果

您需要稍微修改代码。LINQ不修改集合,但返回一个新值和结果


query=query.Where(…)
您需要稍微修改代码。LINQ不修改集合,但返回一个新值和结果

query=query.Where(…)