使用IN子句的手动(动态)LINQ子查询

时间:2010-04-15 15:20:33

标签: c# entity-framework

我想通过LINQ编写手册SQL查询数据库,我的linq方法是:

var q = db.TableView.Where(sqlAfterWhere);
returnValue = q.Count();

如果传递给变量“sqlAfterWhere”的值是:(此变量是String类型)

,则此方法查询得很好
it.Name = 'xyz'

但如果我想使用IN子句,使用子查询怎么办? (我需要在上面的查询中的每个列名之前使用'it'才能工作),我不能在子查询列之前使用'it'作为单独的查询,所以如果我不使用任何东西,我应该怎么做,并直接使用列名称会出现错误<ColumnName> could not be resolved,其中<ColumnName>是我的列名,而在开头就是'it'。

所以查询不起作用是:(这是传递给上面变量的字符串):

it.Name IN (SELECT Name FROM TableName WHERE Address LIKE '%SomeAddress%')

错误出现为:

  

名称无法解决
  地址   无法解决

确切的错误是:

  

在当前范围或上下文中无法解析“'Name'。确保所有引用的变量都在范围内,加载了所需的模式,并且正确引用了名称空间。,接近简单标识符,第6行,列25“。

“地址以及

”的错误相同

如果我使用'它'。在这些列之前,它会给出错误:

  

“元素类型'Edm.Int32'和CollectionType'Transient.collection [Transient.rowtype(GroupID,Edm.Int32(Nullable = True,DefaultValue =))]'不兼容.IN表达式仅支持实体,原语和引用类型。,在WHERE谓词附近,第6行,第14列。“

1 个答案:

答案 0 :(得分:0)

假设TableName也在您的EF上下文中并返回与TableView相同的类型,您应该可以执行类似

的操作
var addresses = db.TableName.Where(x => x.Address.Contains("SomeAddress"));
var q = db.TableView.Intersects(address);
returnValue = q.Count();
相关问题