为什么这个查询总是 return ALL 记录?
Why does this query always return ALL records?
我在 Lightswitch 项目中使用 WCF RIA 来创建一些查询结果。无论如何,此查询都会返回所有结果。我无法让它根据传递的参数 (string Town
) 过滤记录。
public IQueryable<Enquiries> TestQuery(string Town)
{
List<Enquiries> riaenqs = new List<Enquiries>();
var enqs = this.Context.ClientEnquiries
.Include("Client")
.Include("Client.Town")
.OrderBy(enq => enq.Id);
if (Town != null)
{
enqs.Where(enq => enq.Client.Town.TownName == Town);
}
foreach (ClientEnquiry item in enqs.ToList())
{
Enquiries enq = new Enquiries();
enq.Id = item.Id;
enq.ClientName = item.Client.FirstName + " " + item.Client.Surname;
enq.Town = item.Client.Town != null ? item.Client.Town.TownName : null;
riaenqs.Add(enq);
}
return riaenqs.AsQueryable();
}
在调试过程中,我可以看到 Town 已正确填充,如果 Town
不是 null
,我可以看到相应地构建了查询。但是,当我点击执行 linq to ef 查询的 foreach
语句时,我总是会得到所有结果。我只是不知道我哪里滑倒了。
像 Where
这样的 LINQ 方法不会修改 collection/expression 但总是返回一个新方法。
因此您需要将 Where
的结果重新分配给您的原始变量 enqs
:
if (Town != null)
{
enqs = enqs.Where(enq => enq.Client.Town.TownName == Town);
}
我在 Lightswitch 项目中使用 WCF RIA 来创建一些查询结果。无论如何,此查询都会返回所有结果。我无法让它根据传递的参数 (string Town
) 过滤记录。
public IQueryable<Enquiries> TestQuery(string Town)
{
List<Enquiries> riaenqs = new List<Enquiries>();
var enqs = this.Context.ClientEnquiries
.Include("Client")
.Include("Client.Town")
.OrderBy(enq => enq.Id);
if (Town != null)
{
enqs.Where(enq => enq.Client.Town.TownName == Town);
}
foreach (ClientEnquiry item in enqs.ToList())
{
Enquiries enq = new Enquiries();
enq.Id = item.Id;
enq.ClientName = item.Client.FirstName + " " + item.Client.Surname;
enq.Town = item.Client.Town != null ? item.Client.Town.TownName : null;
riaenqs.Add(enq);
}
return riaenqs.AsQueryable();
}
在调试过程中,我可以看到 Town 已正确填充,如果 Town
不是 null
,我可以看到相应地构建了查询。但是,当我点击执行 linq to ef 查询的 foreach
语句时,我总是会得到所有结果。我只是不知道我哪里滑倒了。
像 Where
这样的 LINQ 方法不会修改 collection/expression 但总是返回一个新方法。
因此您需要将 Where
的结果重新分配给您的原始变量 enqs
:
if (Town != null)
{
enqs = enqs.Where(enq => enq.Client.Town.TownName == Town);
}