c# - linq to sql 中的奇怪行为在不过滤的情况下返回所有行

标签 c# linq linq-to-sql

我写这段代码:

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]

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

最佳答案

您已经使用了Func<Regions, bool> filter这会强制它在服务器上运行未过滤的查询后使用 LINQ-to-Objects。要使用查询组合,您必须使用表达式树,而不是委托(delegate)。

将其更改为:

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

关于c# - linq to sql 中的奇怪行为在不过滤的情况下返回所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6409736/

相关文章:

c# - 在 XDocument 中合并 XML 文件

c# - 禁用自动更改检测会在EF中引起哪些错误?

linq - 使用 LINQ 基于嵌套列表过滤列表

c# - 如何在 Android 设备上访问/读取/写入内部存储中的文档文件夹?

c# - 如何在 C# 中通过 Linq 对字典进行分块?

c# - 将 SQL 查询转换为 LINQ C#

c# - Entity Framework 4 语句中的多个 "where"条件 - 可能吗?

c# - Entity Framework 日期组合查询

c# - 更新记录 Linq-to-SQL

c# - 更新对象 LinqToSql