我正在尝试将旧项目迁移到使用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 + "
是可取的。
有没有人遇到过这个问题的解决方案?过去两天我一直在浏览博客文章和论坛。
答案 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中更改它,它应该适当地映射最终查询。