linq-to-sql 是不是处理动态查询?

Posted

技术标签:

【中文标题】linq-to-sql 是不是处理动态查询?【英文标题】:does linq-to-sql handle dynamic queries?linq-to-sql 是否处理动态查询? 【发布时间】:2011-05-07 18:51:10 【问题描述】:

我正在构建一个动态查询。基本上,一个函数接收一个对象 MyParams,其属性是参数;我正在基于 MyParams 对象创建 Where 子句并返回匿名类型列表。

那么,L2SQL 是否支持创建动态查询?我有一个已经适用于其他查询的数据上下文。根据参数,有时我需要访问一些表,所以我还需要动态编写 From 子句还是应该只包含所有表并只关注 where 子句?

谢谢。

【问题讨论】:

【参考方案1】:

如果你想这样做,你可以这样做:

        var baseQuery = dataAccess.Table1.Where(arg => arg.Field1 = 1);

        if (parameter[1] = true)
        
            baseQuery = baseQuery.Where(arg => arg.Field2 = 'Test');
        

        if (parameter[2] = true)
        
            baseQuery = 
                from x in baseQuery
                join y in dataAccess.Table2 on
                    x.Id equals y.Id
                where y.Field3 = 'Something'
                select x;
        

        return baseQuery.ToList();

【讨论】:

如果我使用过 (MyDC TheDC = new MyDC()),它是如何工作的?如何处理多个 from 子句? @frenchie 在具体化查询之前不要释放MyDC。换句话说,return baseQuery.ToList() 应该在您的 using 语句中。 @frenchie:如果 return 语句在 using 语句内,则当方法 return 时,DC 不会被释放,因为它超出了范围。如果要处理 DC,则需要将 ToList 调用的值分配给 using 范围之外(但在方法范围内)的某个变量,然后返回。 @Matt - 不确定我是否理解正确。你是说如果你有像using (MyDC TheDC = new MyDC()) return x; 这样的代码,那么 TheDC 就不会被处理掉? “TheDC 不会被处置”是什么意思?【参考方案2】:

您应该可以使用我的answer 来回答另一个问题。你的问题不是一个精确的副本,你的问题更笼统,但解决问题的原因是完全一样的。

【讨论】:

以上是关于linq-to-sql 是不是处理动态查询?的主要内容,如果未能解决你的问题,请参考以下文章

自定义 Linq-to-SQL 映射源

如何使用 JPQL 创建动态更新查询?

怎么用JAVA编程实现实时动态运行的模拟时钟?

mybatis 之动态sql 增删改查

快递怎么查快递

怎样查短信内容