传递&#34; <tablename>。<columnname>&#34;的字符串。作为Where()条件生成错误:&#34;没有属性或字段&#39; <tablename>&#39;存在于&#39; <tablename>&#39;&#34;

时间:2017-11-08 16:44:14

标签: c# sql-server entity-framework linq dynamic-linq

目前,我使用dynamic-linq库构建查询语句。

执行此查询时出现问题:

query = query.Where("Table1.Column2.Contains(@0)", new string[] { "test" });

供参考:

  • Table1:我的数据库中的表名
  • Column2Table1
  • 中的列名

结果,它抛出一个错误:

  

没有财产或字段&#39;表1&#39;存在于类型&#39;表1&#39;

我确定,命名是正确的。我的一个朋友,他也使用完全相同的库,他可以在不同的数据库MSSQL 2014中成功执行它。我正在使用MSSQL 2008.

当我尝试以不同的方式执行此操作时:

query = query.Where("Column2.Contains(@0)", new string[] { "test" });

工作正常..

我想知道,在我的情况下,我必须使用第一种方法。这就是为什么,我做错了什么?

1 个答案:

答案 0 :(得分:0)

我的理解是Dynamic Linq仍在对象上运行,而不是将你直接编写的内容传递给SQL?因此,您只能在基础对象属性的内容上添加条件。现在这些可能被定义为从数据库中的各个列填充,但它们不一定是......

我认为你基本上都是在尝试这样做:

class x
{
    int SomeProperty{get;set;}
}
...
...
var instance = new x();
instance.SomeProperty = 1;

//compile Error: x is not a property of an instance of x
if (instance.x.SomeProperty==1)  
{
   // ..Do things
}