linq-to-sql中返回所有行而不进行筛选的奇怪行为

本文关键字:筛选 返回 linq-to-sql | 更新日期: 2023-09-27 17:59:30

我写的代码是:

Rep_Regions clsr = new Rep_Regions();
Func<Regions, bool> filter = r => r.RegionID == int.Parse(textBox5.Text);
Regions reg = new Regions();
reg = clsr.FindSingle(filter);

和:

 public Regions FindSingle(Func<Regions, bool> exp)
    {
        using (RepositoryDataContext = new DataClasses1DataContext())
        {
            return RepositoryDataContext.Regions.Where(exp).FirstOrDefault();
        }
    }

这是在Sql-Server:中执行的查询

SELECT [t0].[RegionID], [t0].[RegionDescription]
FROM [dbo].[Region] AS [t0]

为什么查询不过滤结果并返回所有行?

linq-to-sql中返回所有行而不进行筛选的奇怪行为

您使用了Func<Regions, bool> filter,它强制它在服务器上运行未经筛选的查询后使用LINQ to Objects。若要使用查询组合,必须使用表达式树,而不是委托。

更改为:

int regionId= int.Parse(textBox5.Text);
Expression<Func<Regions, bool>> filter = r => r.RegionID == regionId;