为什么此查询始终返回所有记录?

时间:2015-05-17 19:32:42

标签: entity-framework wcf-ria-services visual-studio-lightswitch

我在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语句时,我总是得到所有结果。我只是无法弄清楚我在哪里滑倒。

1 个答案:

答案 0 :(得分:1)

Where这样的LINQ方法不会修改集合/表达式,但总是返回一个新的。

因此,您需要将Where的结果重新分配给原始变量enqs

if (Town != null)
{
    enqs = enqs.Where(enq => enq.Client.Town.TownName == Town);
}