C# 当我有2个where()时,MVC IEnumable toList不返回结果

C# 当我有2个where()时,MVC IEnumable toList不返回结果,c#,asp.net-mvc,linq,entity-framework,ienumerable,C#,Asp.net Mvc,Linq,Entity Framework,Ienumerable,当我有1个过滤器时,我的代码工作正常,但当我有2个过滤器时,ToList()不返回任何行。我尝试运行代码生成的SQL,SQL确实返回了一些东西 IEnumerable<Tag> tags = db.Tags; if( ID != "") tags = tags.Where(t => t.ID == ID); if( part != "") tags = tags.Where(t => t.PartNumber == part); tags.Order

当我有1个过滤器时,我的代码工作正常,但当我有2个过滤器时,ToList()不返回任何行。我尝试运行代码生成的SQL,SQL确实返回了一些东西

IEnumerable<Tag> tags = db.Tags;

if( ID != "")
    tags = tags.Where(t => t.ID == ID);

if( part != "")
    tags = tags.Where(t => t.PartNumber == part);

tags.OrderBy(t => t.ID);
tags = tags.Skip(PageIndex * PageSize).Take(PageSize);

return View(tags.ToList());

那是因为你已经过滤了你的列表

执行此操作时:

tags = tags.Where(t => t.ID == ID);
您的标记集合已更新,现在包含基于筛选器的列表

随后执行此操作时:

tags = tags.Where(t => t.PartNumber == part);
除非您有一个具有给定ID和零件号的标签,否则不会返回任何内容

如果要构建条件筛选器,可以执行以下操作:

var query = tags.AsQueryable();

if(ID != "")
    query = query.Where(w => w.ID == ID);

// add second filter
if( part != "")
    query = query.Where(w => w.PartNumber == part);

return query.ToList();

您的示例数据是什么?
ID
的值是什么?
part
的值是什么?
PageIndex
的值是什么?您的代码没有什么特别的问题。ID和part只是字符串,ID=“123”,part=“A001”,PageIndex是int,在本例中为0。请显示代码生成的返回某些内容的SQL!根据您的更新:如果您在server management studio中运行SQL,但填写这两个参数,您会得到行吗?我非常确定ID和part都存在于同一条记录中,事实上,如果我单独搜索它们,它们会起作用(显示相同的记录)。您可以发布列表内容的输出吗?请参阅可能有所帮助的更新。越来越多的人认为,没有数据返回是因为您没有符合这两个条件的单个记录。同样,您可以发布表中的数据吗(或者更好,发布
IEnumerable
变量中的数据。另外,您是否在数据库中使用不区分大小写或区分大小写的排序规则?Brendan,我非常确定这两个值存在于同一条记录中。我确信输入大小写与DB中的记录匹配。
var query = tags.AsQueryable();

if(ID != "")
    query = query.Where(w => w.ID == ID);

// add second filter
if( part != "")
    query = query.Where(w => w.PartNumber == part);

return query.ToList();