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 是不是处理动态查询?的主要内容,如果未能解决你的问题,请参考以下文章