为什么这个查询总是 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);
}