将LINQ to SQL与动态表一起使用

时间:2009-04-03 15:17:41

标签: sql linq dynamic

我正在尝试将旧项目迁移到使用LINQ,但我遇到了一个非常重要的问题。问题是我们有动态表 用于搜索索引(具有动态属性的CM系统)。搜索索引具有每个可搜索属性{attribute_x,attribute_y,...}的列。 现在问题是我无法静态定义哪些列可用(或者甚至在我们划分搜索索引时使用哪个表),所以我需要一种方法来实现这一点。

我尝试过使用动态表达式,但它们仍然需要一个类型来构建表达式,并且我无法通过反射生成有效类型。 (似乎没有生成MemberInfo)。

我还能满足于能够生成用于搜索的表达式(但我想这不是更容易的任务)。

的内容
var mySearchIndex= db.GetTable(myTableType);
var query = from p in db.Products from idx in mySearchIndex;
query = query.Where(
 "idx." + attributeName + " > 50.0 &&
 idx." + attributeName + " 

是可取的。

有没有人遇到过这个问题的解决方案?过去两天我一直在浏览博客文章和论坛。

3 个答案:

答案 0 :(得分:1)

您可以尝试Linq to Dataset

  

LINQ to DataSet使它变得更容易   更快地查询缓存的数据   DataSet对象。具体来说,LINQ来   DataSet简化了查询   使开发人员能够编写查询   从编程语言本身来看,   而不是使用单独的查询   语言。

答案 1 :(得分:1)

我不相信使用LINQ可以解决这个问题。至少不是我听过或发现过的。如果表结构发生更改,LINQ会中断,并且每次都必须重新创建DataModel。

如果我不正确,我很想知道。 :)

答案 2 :(得分:1)

你在Linq之外的SQL设计工作,但我认为如果你真的需要它可以做到。探索的最佳选择可能是您可以在上下文的构造函数中使用的XmlMappingSource。在动态处理table renaming时,我取得了一些成功。

在映射XML中,数据库上的实际列名称是列元素的“Name”属性,而class属性是“Member”。如果您在XML中更改它,它应该适当地映射最终查询。