【发布时间】:2014-10-29 14:25:03
【问题描述】:
我有一个项目,其中我有一些动态构建的 DataGrids (winform),它们是根据目录中一些 xml 文件中的一些配置生成的。 实际上,每个 DataGrid 都有一个 xml(该文件与 DataGrid 具有相同的名称),该 xml 包含有关 DataGrid 的列和网格应绑定到的数据库表的信息。
使用上述相同信息,会生成一个面板(针对每个网格),其中包含过滤每列所需的字段。
目前我已将此链接中描述的示例应用于我的项目: http://www.codeproject.com/Tips/582450/Build-Where-Clause-Dynamically-in-Linq
使用动态 where (linq) 子句在表数据源上动态过滤我的表(数据源只是整个基础表的选择)。
我要实现的是优化,因为如果有很多数据,数据库提取可能会很昂贵。 因此,我将构建一个动态 linq to sql where 子句,而不是对包含所有表条目的列表进行动态 linq 查询。
我该怎么做?
提前致谢。
【问题讨论】:
-
您引用的链接已经生成了一个
Expression,可以使用.Where(expression)将其应用于DbSet或L2STable。为什么不能直接将其应用到数据库而不是数据源? -
如果您使用的是 Linq2Sql,那么您的查询将返回一个 IQueryable 对象(为简单起见,它只是一个 SqlCommand 的包装器)。如果您将 Where 应用于 IQueryable,该 IQueryable 将被转换为 WHERE Sql 语句。这似乎解决了您的问题,或者我可能一开始没有理解您的担忧。
-
@Sphaso 我不能使用这样的语法:var query = some_linq 然后 query.Where (some_contraint);因为我不知道该字段的名称到表中应用 where 子句和所需的运算符。
-
@Skary Dynamic LINQ 会为您解决这个问题,但这可能更多的是设计问题而不是技术问题。
标签: c# linq-to-sql lambda