我在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
语句时,我总是得到所有结果。我只是无法弄清楚我在哪里滑倒。
答案 0 :(得分:1)
像Where
这样的LINQ方法不会修改集合/表达式,但总是返回一个新的。
因此,您需要将Where
的结果重新分配给原始变量enqs
:
if (Town != null)
{
enqs = enqs.Where(enq => enq.Client.Town.TownName == Town);
}