我试图创建一个Linq语句,它查询作为属性的实体上存在的两个列,以及那些不存在作为实体的数据库中的列的列。创建动态LINQ语句而不具有实体类型属性
例如,我有一个Book实体的集合。每本书都有一个ID和Title属性以及数据库中的匹配列。但是,可以说Book的表格还包含作者的列字段,而我的Book实体没有此字段。
涉及ID和标题看起来可能是这样一个正常的查询:
Books.Where(b=>b.ID == 123 && b.Title == "Title")
但是,我想也是动态的“和作者=‘名称’相当于”添加到上面查询以及。 Book对象上不存在Author属性。
额外的字段和它们应该包含的值实际上将在字典中可用。所以我需要动态添加多个和[FieldName] ='[Value]'条件到查询。
它可能有助于解释为什么我需要此知道我正在使用Azure表存储,并且我重写了将Book实体转换为存储在Azure中的XML中的序列化。
编辑 -
我使用动态的LINQ库尝试,但它不工作。
Books.Where(b=>b.ID == 123 && b.Title == "Title").Where("Author = @0", "SomeName").ToList();
抛出: System.Linq.Dynamic.ParseException:无属性或字段 '作者' 型 '书' 的存在。
此外,
我知道使用Books.AddQueryOption( “$过滤器”, “作者EQ 'SomeName'”)单独使用时作品。但我不知道如何使用AddQueryOption和现有的Where语句。
我想这一点,但库试图检查实体实际上包含了财产的某些原因。 – Vyrotek 2009-10-24 21:52:38
我假设您希望在字段确实存在的某个时间点执行查询。我错过了什么吗?在将其放入SQL语句中执行之前,检查该字段是否存在。 – 2009-10-24 21:53:48
不,属性将永远不会存在于Book对象上。我想将生成的查询发送到数据库并获取数据。我会处理之间的一切。我知道有一个名为'author'的列,并且查询会成功。如上所述,使用AddQueryOption怎么样? – Vyrotek 2009-10-24 22:00:33