我想通过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列。“
答案 0 :(得分:0)
假设TableName
也在您的EF上下文中并返回与TableView
相同的类型,您应该可以执行类似
var addresses = db.TableName.Where(x => x.Address.Contains("SomeAddress"));
var q = db.TableView.Intersects(address);
returnValue = q.Count();