使用链接到SQL我想按照我不希望在select语句中返回的列进行过滤。只要查询是一次构建的,这样就可以正常工作。在我尝试动态构建where子句的情况下,我得到编译时错误,因为该列未包含在select中。
WORKS
Dim resultA = From logItem In dc.Log
Where logItem.Message.Contains(searchText)
Select logItem.LogID, logItem.DateLogged
不工作
Dim resultB = From logItem In dc.Log
Select logItem.LogID, logItem.DateLogged
If (Not String.IsNullOrEmpty(searchText)) Then
resultB = q.Where(Function(logItem)
logItem.Message.Contains(searchText))
End If
我不确定如何绕过这个。任何帮助表示赞赏!
答案 0 :(得分:1)
之后你不能做选择吗?我不知道Vb,但有点像:
Dim resultA = From logItem in dc.Log Select logItem
If (Not String.IsNullOrEmpty(searchText)) Then resultA = q.Where(Function(logItem) logItem.Message.Contains(searchText))
resultA = from logItem in resultA Select logItem.LogID, logItem.DateLogged
我认为这仍然会产生有用的SQL。
答案 1 :(得分:0)
感谢您输入史蒂文。你的建议让我思考,我的最终解决方案是基于此。但是我找到了一种方法来重用同一个对象,方法是使用Lambda表达式在末尾指定一个select(与where语句的方式相同):
q = q.Select(Function(logItem)New Log With {。LogID = logItem.LogID,.DateLogged = logItem.DateLogged}